Kontrollerek a saját MVC keretrendszerben PHP-ben
Amint már tudjátok, a keretrendszerünk összes kontrollerének van egy render metódusa, amelyet
az adatok nézetbe történő elküldéséhez kell meghívni.
Ezt a metódust a felhasználói kontrollereink
öröklik a Controller szülőosztálytól,
amely a magban található. Hozzuk létre ezt az osztályt:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
Amint látjátok, a render metódus paraméterként
fogadja a nézet nevét és a megjelenítendő adatokat.
Legyen ez a metódus egy speciális Page osztály
objektumát adja vissza, amely a kontroller műveletének
adatmegjelenítési információit tartalmazza. Ez az osztály
tartalmazza a nézet nevét, az adatokat,
valamint az oldal címét és a webhely elrendezésének
fájlnevét:
<?php
namespace Core;
class Page
{
private $layout;
private $title;
private $view;
private $data;
public function __construct($layout, $title, $view, $data)
{
$this->layout = $layout;
$this->title = $title;
$this->view = $view;
$this->data = $data;
}
public function __get($property)
{
return $this->$property;
}
}
?>
Ekkor a render metódusunk kódja
így fog kinézni:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
Hadd magyarázzam el, mi történik itt. A nézet neve
és az adatok paraméterként érkeznek a metódushoz. Azonban
a felhasználói kontrollerben még az oldal címe is
be van állítva - a title tulajdonság
beírásával. Ez azt jelenti, hogy a $this->title
lesz az a cím, amelyet továbbadunk a Page
osztály konstruktorának.
Vannak árnyalatok az elrendezéssel kapcsolatban is. Amint tudjátok,
a keretrendszerünk a
default.php fájlból származó elrendezést használja.
Valójában minden műveletnek lehet más elrendezése is. Ehhez
magában a műveletben a layout tulajdonságba
egy másik elrendezésnevet kell beírni.
Hogyan érhetjük ezt el: a szülői kontrollerünk
rendelkezik egy layout tulajdonsággal, amely alapértelmezés szerint
a 'default.php' értékkel rendelkezik.
Ez lesz az alapértelmezett elrendezés. Ha azonban
a felhasználói kontroller művelete felülírja
a layout tulajdonság értékét, akkor az elrendezés
is más lesz.
Másolja le a Controller osztályom kódját és helyezze el a /core/Controller.php fájlban.
Másolja le a Page osztályom kódját és
helyezze el a /core/Page.php fájlban.