Kontrolery vo vlastnom MVC frameworku v PHP

Ako už viete, všetky kontrolery nášho frameworku majú metódu render, ktorú je potrebné volať pre odoslanie dát do pohľadu. Túto metódu naše, používateľské kontrolery dedia od rodičovskej triedy Controller, ktorá sa nachádza v jadre. Poďme vytvoriť túto triedu:

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

Ako vidíte, metóda render parametrom prijíma názov pohľadu a dáta pre zobrazenie. Nech táto metóda vráti objekt špeciálnej triedy Page, v ktorej bude obsahovať informácia o pohľade dát akcie kontrolera. V tejto triede bude obsahovať názov pohľadu, dáta, ako aj title stránky a názov súboru s layoutom stránky:

/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;
    }
  }
?>

Potom kód našej metódy render bude vyzerať takto:

/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);
    }
  }
?>

Vysvetlím, čo sa tu deje. Názov pohľadu a dáta prichádzajú parametrami metódy. Avšak, v používateľskom kontroleri je nastavený aj title stránky - zápisom vlastnosti title. To znamená, že v $this->title bude obsahovať title, ktorý odovzdáme konštruktoru triedy Page.

Existujú aj nuansy s layoutom. Ako viete, náš framework používa layout zo súboru default.php. V skutočnosti, každá akcia môže mať aj iný layout. Pre to je potrebné v samotnej akcii vo vlastnosti layout zapísať iný názov layoutu.

Ako sa to dosiahne: náš rodičovský kontroler má vlastnosť layout, ktorá má predvolene hodnotu 'default.php'. To bude layoutom predvolene. Avšak, ak akcia používateľského kontrolera prepíše hodnotu vlastnosti layout, tak aj layout bude iný.

Задание 1

Skopírujte kód mojej triedy Controller a umiestnite ho do súboru /core/Controller.php.

Задание 2

Skopírujte kód mojej triedy Page a umiestnite ho do súboru /core/Page.php.