Beheerders in jou eie MVC raamwerk in PHP
Soos jy reeds weet, het alle beheerders van ons
raamwerk die metode render, wat
genoem moet word om data na die siening te stuur.
Hierdie metode word deur ons, gebruikersbeheerders,
geërf van die ouerklas Controller,
geleë in die kern. Laat ons hierdie klas maak:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
Soos jy kan sien, neem die metode render as parameter
die naam van die siening en die data vir
vertoning aan. Laat hierdie metode die
voorwerp van 'n spesiale klas Page terugstuur, waarin
die inligting oor die vertoning van die
data van die beheerder se aksie sal bevat.
Hierdie klas
sal die sieningnaam, data,
sowel as die bladsytitel en die lêernaam met die uitleg
van die webwerf bevat:
<?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;
}
}
?>
Dan sal die kode van ons metode render
so lyk:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
Laat ek verduidelik wat hier gebeur. Die sieningnaam
en data kom as parameters van die metode. Eger,
word die bladsytitel ook in die gebruikersbeheerder gestel -
deur die eienskap
title te skryf. Dus, in $this->title
sal die titel wees wat ons aan die
konstrukteur van die klas Page sal oordra.
Daar is ook nuances met die uitleg. Soos jy weet,
gebruik ons raamwerk die uitleg vanuit die lêer
default.php. Eintlik kan elke
aksie 'n ander uitleg hê. Vir
dit moet jy in die aksie self in die eienskap layout
'n ander uitlegnaam skryf.
Hoe dit bereik word: ons ouerbeheerder
het die eienskap layout, by verstek
met die waarde 'default.php'. Dit
sal die verstek-uitleg wees. Eger, as
die aksie van die gebruikersbeheerder die
waarde van die eienskap layout oorheers,
sal die uitleg anders wees.
Kopieer die kode van my klas Controller en plaas dit in die lêer
/core/Controller.php.
Kopieer die kode van my klas Page en
plaas dit in die lêer /core/Page.php.