⊗ppMVDFmCn 28 of 35 menu

Kontrolery we własnym frameworku MVC w PHP

Jak już wiesz, wszystkie kontrolery naszego frameworka mają metodę render, którą trzeba wywoływać, aby wysłać dane do widoku. Ta metodę nasze, użytkownikowe kontrolery dziedziczą po klasie nadrzędnej Controller, znajdującej się w jądrze. Stwórzmy tę klasę:

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

Jak widzisz, metoda render parametrem przyjmuje nazwę widoku i dane do wyświetlenia. Niech ta metoda zwraca obiekt specjalnej klasy Page, w którym będzie zawarta informacja o widoku danych akcji kontrolera. W tej klasie będzie zawarta nazwa widoku, dane, a także tytuł strony i nazwa pliku z layoutem strony:

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

Wtedy kod naszej metody render będzie wyglądał tak:

<?php namespace Core; class Controller { protected $layout = 'default'; protected function render($view, $data) { return new Page($this->layout, $this->title, $view, $data); } } ?>

Wyjaśniam, co się tutaj dzieje. Nazwa widoku i dane przychodzą parametrami metody. Jednakże, w kontrolerze użytkownika ustawiany jest jeszcze tytuł strony - poprzez zapisanie właściwości title. Oznacza to, że w $this->title będzie zawarty tytuł, który przekażemy konstruktorowi klasy Page.

Są także niuanse z layoutem. Jak wiesz, nasz framework używa layoutu z pliku default.php. W rzeczywistości, każda akcja może mieć inny layout. W tym celu trzeba w samej akcji we właściwość layout wpisać inną nazwę layoutu.

Jak to się osiąga: nasz kontroler nadrzędny ma właściwość layout, domyślnie mającą wartość 'default.php'. To będzie layout domyślny. Jednakże, jeśli akcja kontrolera użytkownika nadpisze wartość właściwości layout, to layout będzie inny.

Skopiuj kod mojej klasy Controller i umieść go w pliku /core/Controller.php.

Skopiuj kod mojej klasy Page i umieść go w pliku /core/Page.php.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć