PHPda o'z MVC freymvorkingiz uchun Kontrollerlar
Bildigingizdek, bizning freymvorkimizning barcha
kontrollerlari render metodiga ega bo'lib,
u ma'lumotlarni ko'rinishga yuborish uchun chaqiriladi.
Ushbu metod bizning, foydalanuvchi kontrollerlari
Controller ota sinfidan meros qilib oladi,
u yadroda joylashgan. Keling, bu sinfni yaratamiz:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
Ko'rib turganingizdek, render metodi
parametr sifatida ko'rinish nomi va ko'rsatish
uchun ma'lumotlarni qabul qiladi. Bu metod
Page maxsus sinfining ob'ektini qaytarsin,
unda kontroller harakatining ma'lumotlar ko'rinishi
haqida ma'lumot bo'ladi. Ushbu sinfda ko'rinish
nomi, ma'lumotlar, shuningdek sahifa sarlavhasi
va sayt maketi fayli nomi bo'ladi:
<?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;
}
}
?>
Undan so'ng bizning render metodimizning kodi
quyidagicha ko'rinadi:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
Bu yerda nima bo'layotganini tushuntirayman. Ko'rinish nomi
va ma'lumotlar metod parametrlari sifatida keladi. Biroq,
foydalanuvchi kontrollerida sahifa sarlavhasi ham belgilanadi
- title xususiyatiga yozish orqali. Demak, $this->title
ichida Page sinfining konstruktoriga uzatadigan sarlavhamiz
bo'ladi.
Layout bilan bog'liq nuanslar ham bor. Bilganingizdek,
bizning freymvorkimiz default.php faylidagi layoutdan foydalanadi.
Aslida, har bir harakat boshqa layoutga ega bo'lishi mumkin. Buning
uchun harakatning o'zida layout xususiyatiga boshqa layout nomini
yozish kerak.
Bunga qanday erishiladi: bizning ota kontrollerimiz
layout xususiyatiga ega, standart qiymati
'default.php'. Bu standart layout bo'ladi.
Biroq, agar foydalanuvchi kontrollerining harakati
layout xususiyatining qiymatini o'zgartirsa,
layout ham boshqacha bo'ladi.
Mening Controller sinfim kodini nusxalang va /core/Controller.php
faylida joylashtiring.
Mening Page sinfim kodini nusxalang va
/core/Page.php faylida joylashtiring.