Řadiče ve vlastním MVC frameworku v PHP
Jak již víte, všechny řadiče našeho
frameworku mají metodu render, kterou
je třeba volat pro odeslání dat do pohledu.
Tuto metodu naše uživatelské řadiče
dědí od nadřazené třídy Controller,
umístěné v jádru. Vytvořme tuto třídu:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
Jak vidíte, metoda render parametrem
přijímá název pohledu a data pro
zobrazení. Ať tato metoda vrací
objekt speciální třídy Page, ve
kterém budou obsaženy informace o pohledu
dat akce řadiče. V této třídě
bude obsažen název pohledu, data,
a také titulek stránky a název souboru s rozložením
webu:
<?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;
}
}
?>
Poté kód naší metody render bude
vypadat takto:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
Vysvětlím, co se zde děje. Název pohledu
a data přicházejí parametry metody. Avšak,
v uživatelském řadiči je ještě nastaven
i titulek stránky - zápisem vlastnosti
title. To znamená, že v $this->title
bude obsažen titulek, který předáme
konstruktoru třídy Page.
Existují také nuance s rozložením. Jak víte,
náš framework používá rozložení ze souboru
default.php. Ve skutečnosti každá
akce může mít i jiné rozložení. K
tomu je třeba v samotné akci do vlastnosti layout
zapsat jiný název rozložení.
Jak toho je dosaženo: náš nadřazený řadič
má vlastnost layout, která standardně
má hodnotu 'default.php'. To
bude výchozím rozložením. Avšak, pokud
akce uživatelského řadiče přepíše
hodnotu vlastnosti layout, pak i rozložení
bude jiné.
Zkopírujte kód mé třídy Controller a umístěte jej do souboru
/core/Controller.php.
Zkopírujte kód mé třídy Page a
umístěte jej do souboru /core/Page.php.