PHP-də öz MVC freymvorkunda Kontrollerlər
Artıq bildiyiniz kimi, freymvorkumuzun bütün
kontrollerləri məlumatları təsvirə göndərmək
üçün çağırılmalı olan render metoduna
malikdir. Bu metod bizim, istifadəçi kontrollerləri
tərəfindən nüvədə yerləşən Controller
valideyn klassından miras alınır. Gəlin bu klassı edək:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
Gördüyünüz kimi, render metodu parametr kimi
təsvirin adını və göstəriləcək məlumatları qəbul edir.
Qoy bu metod, kontroller əməliyyatının məlumatlarının
təsviri haqqında məlumatın olacağı xüsusi Page
klassının obyektini qaytarsın. Bu klassda təsvirin adı,
məlumatlar, həmçinin səhifənin başlığı və saytın layout
faylının adı olacaq:
<?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;
}
}
?>
O zaman bizim render metodumuzun kodu
bax belə görünəcək:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
Bura nə baş verdiyini izah edim. Təsvirin adı
və məlumatlar metodun parametrləri ilə gəlir. Lakin,
istifadəçi kontrollerində həmçinin səhifənin başlığı
təyin olunur - title xassəsinə yazılmaqla
Deməli, $this->title-də Page
klassının konstruktoruna ötürəcəyimiz başlıq olacaq.
Layout ilə də nüanslar var. Bildiyiniz kimi,
bizim freymvorkumuz default.php faylından
olan layout-dan istifadə edir. Əslində, hər bir
əməliyyatın başqa layout-u ola bilər. Bunun üçün
əməliyyatın özündə layout xassəsinə başqa
bir layout adı yazılmalıdır.
Bu necə əldə olunur: bizim valideyn kontroller
layout xassəsinə malikdir, standart olaraq
'default.php' dəyərinə malikdir. Bu
standart layout olacaq. Lakin, əgər istifadəçi
kontrollerinin əməliyyatı layout xassəsinin
dəyərini dəyişsə, onda layout da başqa olacaq.
Mənim Controller klassımın kodunu köçürün və onu
/core/Controller.php faylına yerləşdirin.
Mənim Page klassımın kodunu köçürün və
onu /core/Page.php faylına yerləşdirin.