Կոնտրոլերները ձեր սեփական MVC ֆրեյմվորկում PHP-ում

Ինչպես արդեն գիտեք, մեր ֆրեյմվորկի բոլոր կոնտրոլերներն ունեն render մեթոդը, որն անհրաժեշտ է կանչել տվյալները ներկայացմանը ուղարկելու համար: Այս մեթոդը մեր, օգտագործողի կոնտրոլերները ժառանգում են ծնողական Controller դասից, որը տեղակայված է միջուկում: Եկեք ստեղծենք այս դասը:

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

Ինչպես տեսնում եք, render մեթոդը պարամետրով ընդունում է ներկայացման անունը և տվյալները ցուցադրման համար: Թող այս մեթոդը վերադարձնի հատուկ Page դասի օբյեկտ, որի մեջ կպարունակվի կոնտրոլերի գործողության տվյալների ներկայացման մասին տեղեկատվությունը: Այս դասում կպարունակվի ներկայացման անունը, տվյալները, ինչպես նաև էջի վերնագիրը և կայքի դասավորության ֆայլի անունը:

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

Այդ դեպքում մեր render մեթոդի կոդը կունենա հետևյալ տեսքը:

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

Պարզաբանեմ, թե ինչ է տեղի ունենում այստեղ: Ներկայացման անունը և տվյալները գալիս են մեթոդի պարամետրերով: Սակայն, օգտագործողի կոնտրոլերում նշվում է նաև էջի վերնագիրը` գրվելով title հատկության մեջ: Սա նշանակում է, որ $this->title-ի մեջ կպարունակվի այն վերնագիրը, որը մենք կփոխանցենք Page դասի կոնստրուկտորին:

Կան նաև նրբություններ դասավորության հետ: Ինչպես գիտեք, մեր ֆրեյմվորկը օգտագործում է դասավորություն default.php ֆայլից: Իրականում, յուրաքանչյուր գործողություն կարող է ունենալ նաև այլ դասավորություն: Դրա համար անհրաժեշտ է հենց գործողության մեջ layout հատկության մեջ գրել դասավորության այլ անուն:

Ինչպես է դա իրականացվում. մեր ծնողական կոնտրոլերը ունի layout հատկություն, որն լռելյայն ունի 'default.php' արժեքը: Սա կլինի լռելյայն դասավորությունը: Սակայն, եթե օգտագործողի կոնտրոլերի գործողությունը վերասահմանի layout հատկության արժեքը, ապա դասավորությունը կլինի այլ:

Задание 1

Պատճենեք իմ Controller դասի կոդը և տեղադրեք այն /core/Controller.php ֆայլում:

Задание 2

Պատճենեք իմ Page դասի կոդը և տեղադրեք այն /core/Page.php ֆայլում: