Kontroleri u svom MVC frejmvorku u PHP
Kao što već znate, svi kontroleri našeg
frejmvorka imaju metod render, koji
treba pozvati da bismo poslali podatke u prikaz.
Ovaj metod naši, korisnički kontroleri
nasleđuju od roditeljske klase Controller,
koja se nalazi u jezgru. Napravimo ovu klasu:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
Kao što vidite, metod render parametrima
prihvata ime prikaza i podatke za
prikazivanje. Neka ovaj metod vraća
objekat posebne klase Page, u
kojoj će se nalaziti informacija o prikazu
podataka akcije kontrolera. U ovoj klasi
će se nalaziti ime prikaza, podaci,
kao i title strane i ime fajla sa izgledom
sajta:
<?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;
}
}
?>
Tada će kod našeg metoda render
izgledati ovako:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
Da pojasnim šta se ovde dešava. Ime prikaza
i podaci dolaze kao parametri metoda. Međutim,
u korisničkom kontroleru se još postavlja
i title strane - putem upisivanja svojstva
title. Dakle, u $this->title
biće sadržan title, koji ćemo proslediti
konstruktoru klase Page.
Postoje i nijanse sa izgledom (layout). Kao što znate,
naš frejmvork koristi izgled (layout) iz fajla
default.php. Zapravo, svaka
akcija može imati i drugi izgled (layout). Za
ovo je potrebno u samoj akciji u svojstvo layout
upisati drugo ime izgleda (layout).
Kako se to postiže: naš roditeljski kontroler
ima svojstvo layout, koje podrazumevano
ima vrednost 'default.php'. Ovo
će biti izgled (layout) podrazumevano. Međutim, ako
akcija korisničkog kontrolera redefiniše
vrednost svojstva layout, onda će i izgled (layout)
biti drugačiji.
Kopirajte kod moje klase Controller i postavite ga u fajl
/core/Controller.php.
Kopirajte kod moje klase Page i
postavite ga u fajl /core/Page.php.