PHP-дегі MVC фреймворкіміздегі Контроллерлер
Сіз білетіндей, біздің фреймворкіміздің
барлық контроллерлерінде render әдісі бар,
ол деректерді көрініске жіберу үшін қажет.
Бұл әдіс біздің, пайдаланушы контроллерлері
ядрода орналасқан аталық Controller
класынан мұра етеді. Мына класты жасайық:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
Көріп тұрғаныңыздай, render әдісі
параметр ретінде көрініс атауын және
көрсету үшін қажет деректерді қабылдайды.
Бұл әдіс деректерді көрсету әрекетінің
көрінісі туралы ақпарат болатын арнайы
Page класының нысанын қайтарсын.
Бұл класта көрініс атауы, деректер,
сонымен қатар бет тайтлы және сайттың
макеты бар файл атауы болады:
<?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;
}
}
?>
Сонда біздің render әдісіміздің коды
мынадай болады:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
Мұнда не болып жатқанын түсіндірейін. Көрініс атауы
және деректер әдіс параметрлері ретінде келеді. Алайда,
пайдаланушы контроллерінде тағы да бет тайтлы
беріледі - title қасиетіне жазу арқылы.
Демек, $this->title-та Page
класының конструкторына беретін тайтл болады.
Сондай-ақ, лэйаутпен байланысты нюанстар бар. Сіз білетіндей,
біздің фреймворкіміз default.php файлындағы лэйаутты қолданады.
Шын мәнінде, әрбір әрекеттің басқа лэйауты болуы мүмкін. Ол
үшін әрекеттің өзінде layout қасиетіне басқа лэйаут
атауын жазу керек.
Бұл қалай жүзеге асады: біздің аталық контроллердің
layout қасиеті бар, әдепкі бойынша
'default.php' мәніне ие. Бұл әдепкі лэйаут болады.
Алайда, егер пайдаланушы контроллерінің әрекеті
layout қасиетінің мәнін өзгертсе, онда лэйаут та
басқаша болады.
Менің Controller класымның кодын көшіріп алып, оны
/core/Controller.php файлына орналастырыңыз.
Менің Page класымның кодын көшіріп алып,
оны /core/Page.php файлына орналастырыңыз.