Ohjaimet omassa MVC-kehyksessä PHP:ssä
Kuten jo tiedät, kaikilla kehyksemme
ohjaimista on metodi render, joka
tulee kutsua lähettääksesi dataa näkymään.
Tämän metodin perivät käyttäjien omat ohjaimet
yläluokasta Controller,
joka sijaitsee ytimessä. Tehdään tämä luokka:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
Kuten näet, render-metodi
ottaa parametrinaan näkymän nimen ja datan
esitettäväksi. Olkoon, että tämä metodi palauttaa
erityisen Page-luokan olion, joka
sisältää tietoa ohjaimen toiminnon datan
esittämisestä. Tämä luokka
sisältää näkymän nimen, datan,
sekai sivun otsikon ja sivuston asettelun
tiedoston nimen:
<?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;
}
}
?>
Silloin render-metodimme koodi
näyttää tältä:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
Selitän, mitä tässä tapahtuu. Näkymän nimi
ja data saapuvat metodin parametreina. Kuitenkin,
käyttäjän omassa ohjaimessa asetetaan myös
sivun otsikko - tallentamalla title-ominaisuuteen.
Siis, $this->title
sisältää otsikon, jonka välitämme
Page-luokan konstruktorille.
Asettelussa on myös vivahteita. Kuten tiedät,
kehyksemme käyttää asettelua tiedostosta
default.php. Itse asiassa jokainen
toiminto voi käyttää toista asettelua.
Tätä varten tarvitsee itse toiminnossa layout-ominaisuuteen
kirjoittaa toisen asettelun nimen.
Miten tämä saavutetaan: yläluokkamme ohjain
sisältää layout-ominaisuuden, joka oletuksena
sisältää arvon 'default.php'. Tämä
tulee olemaan oletusasettelu. Kuitenkin, jos
käyttäjän ohjaimen toiminto määrittelee uudelleen
layout-ominaisuuden arvon, niin myös asettelu
tulee olemaan erilainen.
Kopioi luokkani Controller koodi ja sijoita se tiedostoon
/core/Controller.php.
Kopioi luokkani Page koodi ja
sijoita se tiedostoon /core/Page.php.