PHP-däki öz MVC çärjegiňizde kontrolerler

Bilşiňiz ýaly, çärjegiňiziň ähli kontrolerleriniň render metody bar, bu metoda görkezmäni işledip üýtgetmek üçin çagyrmaly. Bu metod bizimi, ulanyjy kontrolerlerimiz, özekde ýerleşýän kakasy Controller klasydan miras alýar. Geliň bu klasy dörediň:

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

Görşüňiz ýaly, render metodu görkezme adyny we görkezmek üçin maglumatlary parametr hökmünde alýar. Bu metod görkezme we kontroleriň hereketi barada maglumatlary saklaýan aýratyn Page klasynyň obyektini yzyna gaýtarsyn. Bu klasda görkezme ady, maglumatlar, şeýle hem sahypanyň taýtly we saýtyň maýat faýlynyň ady bolmaly:

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

Şonda bizimi render metodymyzyň kody şeýle görüner:

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

Bu ýerde näme bolýandygyny düşündirýärin. Görkezme ady we maglumatlar metoda parametrler hökmünde gelýär. Şonda-da, ulanyjy kontrolerinde sahypa taýtly hem kesgitlenýär - title hassaýaty ýazylmagy arkaly. Demek, Page klasynyň konstruktoruna geçirjek taýtly $this->title içinde bolar.

Maýat bilen hem çylşyrymlar bar. Bilşiňiz ýaly, bizimi çärjegiňiz default.php faýlyndan gelen maýaty ulanyýar. Aslynda, her hereket başga maýata hem eýe bolup biler. Bunuň üçin hereketiň özünde layout hassaýatyna başga maýat adyny ýazmaly.

Bu nädip gazanylýar: bizimi kakasy kontroleriňiz layout hassaýaty bar, deslapky bahasy 'default.php'. Bu deslapky maýat bolar. Şonda-da, eger ulanyjy kontroleriniň hereketi layout hassaýatynyň bahasyny üýtgetse, maýat hem başga bolar.

Задание 1

Meniň Controller klasymyň kodyny göçürip alyň we ony /core/Controller.php faýlyna ýerleşdiriň.

Задание 2

Meniň Page klasymyň kodyny göçürip alyň we ony /core/Page.php faýlyna ýerleşdiriň.