Կոնտրոլերները ձեր սեփական MVC ֆրեյմվորկում PHP-ում
Ինչպես արդեն գիտեք, մեր ֆրեյմվորկի բոլոր կոնտրոլերներն ունեն render մեթոդը, որն
անհրաժեշտ է կանչել տվյալները ներկայացմանը ուղարկելու համար:
Այս մեթոդը մեր, օգտագործողի կոնտրոլերները
ժառանգում են ծնողական Controller դասից,
որը տեղակայված է միջուկում: Եկեք ստեղծենք այս դասը:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
Ինչպես տեսնում եք, render մեթոդը պարամետրով
ընդունում է ներկայացման անունը և տվյալները
ցուցադրման համար: Թող այս մեթոդը վերադարձնի
հատուկ Page դասի օբյեկտ, որի
մեջ կպարունակվի կոնտրոլերի գործողության տվյալների ներկայացման
մասին տեղեկատվությունը: Այս դասում
կպարունակվի ներկայացման անունը, տվյալները,
ինչպես նաև էջի վերնագիրը և կայքի դասավորության ֆայլի
անունը:
<?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 մեթոդի կոդը
կունենա հետևյալ տեսքը:
<?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 հատկության արժեքը, ապա դասավորությունը
կլինի այլ:
Պատճենեք իմ Controller դասի կոդը և տեղադրեք այն /core/Controller.php ֆայլում:
Պատճենեք իմ Page դասի կոդը և
տեղադրեք այն /core/Page.php ֆայլում: