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 синфининг конструкторига
узatadigan тайтл бўлади.
Макет билан боглик нюанслар ҳам мавжуд.
Билганингиздек, бизнинг фреймворкимиз
default.php файлидан макетдан фойдаланади.
Аслда, ҳар бир амалиёт бошқа макетга ҳам эга
бўлиши мумкин. Бу́ни амалга ошириш учун амалиётнинг
ўзида layout хусусиятига бошқа макет
номини ёзиш керак.
Бу́ қандай амалга оширилади: бизнинг ота-она
контроллеримиз layout хусусиятига эга
бу́либ, су́нъий холда 'default.php'
қийматга эга. Бу́ су́нъий макет бўлади. Бирок,
агар фойдаланувчи контроллерининг амалиёти
layout хусусиятининг қийматини қайта
белгиласа, у́ ҳолда макет ҳам бошқача бўлади.
Менинг Controller синфимнинг кодини
нусхалаб олинг ва уни /core/Controller.php
файлига жойланг.
Менинг Page синфимнинг кодини нусхалаб
олинг ва уни /core/Page.php файлига жойланг.