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 класстын
конструкторуна өткөрөбүз.
Макет (layout) менен да кээ бир нюанстар бар. Силер биле тургандай,
биздин фреймворк
default.php файлындагы макетти колдонот.
Иш жүзүндө, ар бир аракет башка макетке ээ болушу мүмкүн.
Бул үчүн аракеттин өзүндө layout
касиетине башка макеттин атын жазуу керек.
Бул кандайча жеткиликтүү болот: биздин аталык контроллер
layout касиетине ээ, ал ыңгайлаштырылганда
'default.php' маанисин ээ. Бул
ыңгайлаштырылган макет болот. Бирок, эгерде
колдонуучунун контроллер аракети
layout касиетинин маанисин кайра аныктаса,
анда макет да башкача болот.
Менин Controller класстын кодун көчүрүп, аны файлга
/core/Controller.php жайгаштырыңыз.
Менин Page класстын кодун көчүрүп,
аны файлга /core/Page.php жайгаштырыңыз.