⊗ppMVDFmCn 28 of 35 menu

Контролери в собствен 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.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне