Responses

From A-Eskwiki
Jump to: navigation, search

Als onderdeel van Project Kakkerlak en Project SOEPMES wordt de testbaarheid van de code aangepakt. Een belangrijk onderdeel hiervan is dat controllerfuncties niet meer zomaar headers zetten en exit() aanroepen. In plaats daarvan is het idee dat ze een Response teruggeven die de HTTP-response representeert.

Hoe nieuwe response-klare code te maken

Het belangrijkste is om bovenin een nieuw controllerbestand, buiten je BlaControllerklasse, de functie setZeurmodus(); aan te roepen. Dit zorgt ervoor dat de code gaat zeuren als je ouderwetse conventies gaat gebruiken.

Vervolgens ga je een controllerfunctie maken. Mocht je een HTTP-code als 403 willen geven, dan kun je return responseUitStatusCode(403); gebruiken. Heb je een (HTML)Page-object (gebruik hier AUB ook $page = new HTMLPage(); voor, niet $page = Page::getInstance();! Zie ook de Page-pagina.), dan kun je deze stoppen in return new PageResponse($page);. De PageResponse-klasse zorgt automatisch voor content-type.

Het is netjes om je Viewcode een Page te laten returnen, en de Controllercode deze in een PageResponse te laten zetten.

Vertaalsleutel stateful → puur

$Bla_Page BLAPage
CSVPage, Csv_Page CSVResponse
JSONPage, Json_Page JSONResponse
HTMLPage::innerRedirect return responseRedirect
Page::end return new PageResponse
Page::redirect return responseRedirect
Page::redirectMelding return Page::responseRedirectMelding
print_error Page::addMelding
print_warning Page::addMelding
spaceHTTP return responseUitStatusCode
spaceRedirect return responseRedirect
TextPage, Text_Page Response
tipbox(...[, $echo=true]), $element->add(tipbox(..., false))

Hoe het intern werkt

In de onderste laag van space, space/space.php, wordt Benamite aangeroepen om een vfsEntry te bekomen, waarop ->display() wordt aangeroepen. In het normale geval is dit een vfsEntryInclude, die een methode in je controller aanroept. De response-klare controllers returnen een Response-instantie. Op deze response wordt door space vervolgens ->send(); aangeroepen. Er zijn nog wat mooie (niet-zo-mooie) ouderwetse functies als spaceHTTP die ook door space worden afgevangen. Het beste is om space/space.php te bekijken hoe dit precies gebeurt.