Kontrolleri savā PHP MVC ietvarā
Kā jūs jau zināt, visi mūsu ietvara
kontrolleri ir ar metodi render, kuru
vajag izsaukt, lai nosūtītu datus uz skatu.
Šo metodi mūsu, lietotāju kontrolleri
manto no vecāku klases Controller,
kas atrodas kodolā. Izveidosim šo klasi:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
Kā jūs redzat, metode render ar parametru
pieņem skata nosaukumu un datus attēlošanai.
Lai šī metode atgriež
objektu speciālās klases Page, kurā
būs informācija par skata datu attēlošanu
kontrollera darbībā. Šajā klasē
būs skata nosaukums, dati,
kā arī lapas virsraksts un faila nosaukums ar vietnes
izkārtojumu:
<?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;
}
}
?>
Tad mūsu metodes render kods
izskatīsies šādi:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
Paskaidrošu, kas šeit notiek. Skata nosaukums
un dati nāk kā metodes parametri. Tomēr,
lietotāja kontrolerī tiek iestatīts vēl
un lapas virsraksts - ierakstot īpašību
title. Tātad, $this->title
būs virsraksts, ko mēs nodosim
klases Page konstruktoram.
Ir arī nianses ar izkārtojumu. Kā jūs zināt,
mūsu ietvars izmanto izkārtojumu no faila
default.php. Patiesībā, katra
darbība var izmantot arī citu izkārtojumu.
Lai to izdarītu, pašā darbībā īpašībā layout
jāieraksta cits izkārtojuma nosaukums.
Kā tas tiek panākts: mūsu vecāku kontroleris
ir ar īpašību layout, pēc noklusējuma
ar vērtību 'default.php'. Tas
būs noklusētais izkārtojums. Tomēr, ja
lietotāja kontrollera darbība pārdefinēs
īpašības layout vērtību, tad arī izkārtojums
būs cits.
Nokopējiet mana klases Controller kodu un ievietojiet to failā
/core/Controller.php.
Nokopējiet mana klases Page kodu un
ievietojiet to failā /core/Page.php.