Контроллерҳо дар MVC фреймворки худ дар PHP
Чун аллакай медонистед, ҳамаи контроллерҳои
фреймворки мо усули 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 ҷойгир кунед.