<?php
// Voorbeeld, maakt niet echt uit waar variabelen vandaan komen
$data = array("title" => "Beveiligde pagina"
"username" => $username,
"css_href" => $url,
"subpage" => "views/users/settings.php",
"subpage_content" => "views/users/email-settings.php",
"email" => $email,
"form_msg" => $form_msg,
);
$this->loadView("views/users/index.php", $data);
?>
Elke controller extends de Base Controller. Daardoor heeft elke controller de methode loadView om een view weer te geven. De methode loadView krijgt ook nog de $data parameter mee, dat is een array met de variabelen die de view nodig heeft. Deze array wordt ge-extract.
Ik kan dus maar 1x data aan de view meegeven. Daardoor moet ik in bijna elke controller opnieuw dezelfde variabelen in de $data array zetten en meegeven aan loadView.
Ik had dus bedacht om een nieuwe laag toe te voegen tussen de controllers. Bijvoorbeeld de UserAreaController voor alles van het gedeelte waar bv. een gebruiker ingelogd moet zijn.
Dan krijg je:
Controller (base controller)
|- UserAreaController
|- (de specifieke controller van een pagina)
In die UserAreaController kan ik dan in de constructor alle (boilerplate) variabelen maken. Het probleem is dus dat ik dan meerdere keren data moet mee kunnen geven aan de view. Terwijl die view nog moet worden gemaakt in een lager gelegen controller.
Wat is dan beter: naast de loadView methode, een nieuwe methode maken in de base controller die bv. storeViewData heet. Dan sla ik daar tijdelijk de data op, totdat loadView wordt aangeroepen. Als die wordt aangeroepen wordt de eerder opgegeven (bewaarde) data ook ge-extract (net als de $data in de loadView parameter) en zo wordt dus alles berijkbaar in het view bestand.
Of helemaal die $data parameter van loadView eruit halen, en via een aparte methode van de base controller de data meegeven. Zodat er een aparte methode is voor het laden (includen) van een view, en een aparte voor het meegeven van de data.