⊗ppMVDFmCn 28 of 35 menu

PHP да MVC фреймворкидаги Контроллерлар

Сиз билганингиздек, бизнинг фреймворкимизнинг барча контроллерларида 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 синфининг конструкторига узatadigan тайтл бўлади.

Макет билан боглик нюанслар ҳам мавжуд. Билганингиздек, бизнинг фреймворкимиз 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çeOʻzbekTiếng Việt
Биз веб-сайт ишлаши, таҳлил қилиш ва персоналлаштириш учун кукидан фойдаланамиз. Маълумотларни қайта ишлаш Махфийлик сиёсатига мувофиқ амалга оширилади.
ҳаммасини қабул қилиш мослаштириш рад этиш