Контролери во својот 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.