⊗ppMVDFmCn 28 of 35 menu

Kontrollers i ditt eget MVC-ramverk i PHP

Som du redan vet har alla kontrollers i vårt ramverk metoden render, som behöver anropas för att skicka data till vyn. Denna metod ärver våra anpassade kontrollers från förälderklassen Controller, placerad i kärnan. Låt oss skapa denna klass:

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

Som du ser tar metoden render som parameter emot namnet på vyn och data för visning. Låt denna metod returnera ett objekt av en speciell klass Page, i vilken information om visningen av kontrolleraktionens data kommer att finnas. I denna klass kommer namnet på vyn, data, samt sidans titel och filnamnet för webbplatsens layout att finnas:

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

Då kommer koden för vår metod render att se ut så här:

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

Låt mig förklara vad som händer här. Namnet på vyn och data kommer som parametrar till metoden. Dock sätts även sidans titel i den användardefinierade kontrollern - genom att skriva till egenskapen title. Det betyder att i $this->title kommer titeln att finnas, som vi skickar vidare till konstruktorn för klassen Page.

Det finns även nyanser med layouten. Som du vet använder vårt ramverk en layout från filen default.php. Egentligen kan varje åtgärd ha en annan layout. För att göra detta behöver man i själva åtgärden i egenskapen layout skriva ett annat layoutnamn.

Hur detta uppnås: vår föräldrakontroller har en egenskap layout, som som standard har värdet 'default.php'. Detta kommer att vara standardlayouten. Men om en åtgärd i den användardefinierade kontrollern åsidosätter värdet på egenskapen layout, så kommer layouten att bli en annan.

Kopiera koden för min klass Controller och placera den i filen /core/Controller.php.

Kopiera koden för min klass Page och placera den i filen /core/Page.php.

huitrobypt