Kontrolery vo vlastnom MVC frameworku v PHP
Ako už viete, všetky kontrolery nášho
frameworku majú metódu render, ktorú
je potrebné volať pre odoslanie dát do pohľadu.
Túto metódu naše, používateľské kontrolery
dedia od rodičovskej triedy Controller,
ktorá sa nachádza v jadre. Poďme vytvoriť túto triedu:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
Ako vidíte, metóda render parametrom
prijíma názov pohľadu a dáta pre
zobrazenie. Nech táto metóda vráti
objekt špeciálnej triedy Page, v
ktorej bude obsahovať informácia o pohľade
dát akcie kontrolera. V tejto triede
bude obsahovať názov pohľadu, dáta,
ako aj title stránky a názov súboru s layoutom
stránky:
<?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;
}
}
?>
Potom kód našej metódy render bude
vyzerať takto:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
Vysvetlím, čo sa tu deje. Názov pohľadu
a dáta prichádzajú parametrami metódy. Avšak,
v používateľskom kontroleri je nastavený aj
title stránky - zápisom vlastnosti
title. To znamená, že v $this->title
bude obsahovať title, ktorý odovzdáme
konštruktoru triedy Page.
Existujú aj nuansy s layoutom. Ako viete,
náš framework používa layout zo súboru
default.php. V skutočnosti, každá
akcia môže mať aj iný layout. Pre
to je potrebné v samotnej akcii vo vlastnosti layout
zapísať iný názov layoutu.
Ako sa to dosiahne: náš rodičovský kontroler
má vlastnosť layout, ktorá má predvolene
hodnotu 'default.php'. To
bude layoutom predvolene. Avšak, ak
akcia používateľského kontrolera prepíše
hodnotu vlastnosti layout, tak aj layout
bude iný.
Skopírujte kód mojej triedy Controller a umiestnite ho do súboru
/core/Controller.php.
Skopírujte kód mojej triedy Page a
umiestnite ho do súboru /core/Page.php.