Kontrollorët në MVC framework-in e tyre në PHP

Siç e dini tashmë, të gjithë kontrollorët e framework-it tonë kanë metodën render, e cila duhet thirrur për të dërguar të dhënat në pamje. Këtë metodë kontrollorët tanë, të përdoruesve, e trashëgojnë nga klasa prind Controller, e vendosur në bërthamë. Le ta bëjmë këtë klasë:

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

Siç e shihni, metoda render si parametër pranon emrin e pamjes dhe të dhënat për shfaqje. Le të kthejë kjo metodë një objekt të klasës speciale Page, në të cilin do të përmbahet informacioni për pamjen e të dhënave të veprimit të kontrollorit. Në këtë klasë do të përmbahet emri i pamjes, të dhënat, si dhe titulli i faqes dhe emri i skedarit me layout-in e sajtit:

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

Atëherë kodi i metodës sonë render do të duket kështu:

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

Po e shpjegoj se çfarë po ndodh këtu. Emri i pamjes dhe të dhënat vijnë si parametra të metodës. Megjithatë, në kontrollorin e përdoruesit vendoset edhe titulli i faqes - duke e shkruar vetinë title. Do të thotë, në $this->title do të përmbahet titulli, të cilin do ta kalojmë konstruktorit të klasës Page.

Ka edhe nuanca me layout-in. Siç e dini, framework-i ynë përdor layout nga skedari default.php. Në fakt, çdo veprim mund të ketë edhe një layout tjetër. Për këtë duhet në vetë veprimin në vetinë layout të shkruhet një emër tjetër layout-i.

Si arrihet kjo: kontrollori ynë prind ka vetinë layout, si parazgjedhje që ka vlerën 'default.php'. Ky do të jetë layout-i si parazgjedhje. Megjithatë, nëse veprimi i kontrollorit të përdoruesit e ridefinon vlerën e vetisë layout, atëherë edhe layout-i do të jetë tjetër.

Задание 1

Kopjoni kodin e klasës time Controller dhe vendoseni në skedarin /core/Controller.php.

Задание 2

Kopjoni kodin e klasës time Page dhe vendoseni në skedarin /core/Page.php.