Kontrolerji v lastnem MVC ogrodju v PHP

Kot že veste, imajo vsi kontrolerji našega ogrodja metodo render, ki jo je treba klicati za pošiljanje podatkov v pogled. To metodo naši, uporabniški kontrolerji, podedujejo od nadrejenega razreda Controller, ki se nahaja v jedru. Naredimo ta razred:

/core/Controller.php<?php
  namespace Core;
  
  class Controller
  {
    protected function render($view, $data) {
      
    }
  }
?>

Kot vidite, metoda render kot parameter sprejme ime pogleda in podatke za prikaz. Naj ta metoda vrne objekt posebnega razreda Page, v katerem bo vsebovala informacije o pogledu podatkov akcije kontrolerja. V tem razredu bo vsebovano ime pogleda, podatki, pa tudi naslov strani in ime datoteke z postavitvijo spletišča:

/core/Page.php<?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;
    }
  }
?>

Takrat bo koda naše metode render videti takole:

/core/Controller.php<?php
  namespace Core;
  
  class Controller
  {
    protected $layout = 'default';
    
    protected function render($view, $data) {
      return new Page($this->layout, $this->title, $view, $data);
    }
  }
?>

Naj pojasnim, kaj se tu dogaja. Ime pogleda in podatki pridejo kot parametri metode. Vendar, v uporabniškem kontrolerju je nastavljen še naslov strani - z zapisovanjem lastnosti title. To pomeni, da bo v $this->title vsebovan naslov, ki ga bomo posredovali konstruktorju razreda Page.

Obstajajo tudi nianse z postavitvijo. Kot veste, naše ogrodje uporablja postavitev iz datoteke default.php. Pravzaprav lahko vsaka akcija ima tudi drugačno postavitev. Za to je treba v sami akciji v lastnost layout zapisati drugo ime postavitve.

Kako se to doseže: naš nadrejeni kontroler ima lastnost layout, ki privzeto ima vrednost 'default.php'. To bo privzeta postavitev. Vendar, če akcija uporabniškega kontrolerja predefinira vrednost lastnosti layout, bo tudi postavitev drugačna.

Задание 1

Kopirajte kodo mojega razreda Controller in ga razmestite v datoteko /core/Controller.php.

Задание 2

Kopirajte kodo mojega razreda Page in ga razmestite v datoteko /core/Page.php.