Kontrollorët në MVC framework-in e tyre në PHP
Siç e dini tashmë, të gjithë kontrollorët e framework-it tonë
kanë metodën render, e cila
duhet thirrur për të dërguar të dhënat në pamje.
Këtë metodë kontrollorët tanë, të përdoruesve,
e trashëgojnë nga klasa prind Controller,
e vendosur në bërthamë. Le ta bëjmë këtë klasë:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
Siç e shihni, metoda render si parametër
pranon emrin e pamjes dhe të dhënat për
shfaqje. Le të kthejë kjo metodë
një objekt të klasës speciale Page, në
të cilin do të përmbahet informacioni për pamjen
e të dhënave të veprimit të kontrollorit. Në këtë klasë
do të përmbahet emri i pamjes, të dhënat,
si dhe titulli i faqes dhe emri i skedarit me layout-in
e sajtit:
<?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;
}
}
?>
Atëherë kodi i metodës sonë render do të
duket kështu:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
Po e shpjegoj se çfarë po ndodh këtu. Emri i pamjes
dhe të dhënat vijnë si parametra të metodës. Megjithatë,
në kontrollorin e përdoruesit vendoset edhe
titulli i faqes - duke e shkruar vetinë
title. Do të thotë, në $this->title
do të përmbahet titulli, të cilin do ta kalojmë
konstruktorit të klasës Page.
Ka edhe nuanca me layout-in. Siç e dini,
framework-i ynë përdor layout nga skedari
default.php. Në fakt, çdo
veprim mund të ketë edhe një layout tjetër. Për
këtë duhet në vetë veprimin në vetinë layout
të shkruhet një emër tjetër layout-i.
Si arrihet kjo: kontrollori ynë prind
ka vetinë layout, si parazgjedhje
që ka vlerën 'default.php'. Ky
do të jetë layout-i si parazgjedhje. Megjithatë, nëse
veprimi i kontrollorit të përdoruesit e ridefinon
vlerën e vetisë layout, atëherë edhe layout-i
do të jetë tjetër.
Kopjoni kodin e klasës time Controller dhe vendoseni në skedarin
/core/Controller.php.
Kopjoni kodin e klasës time Page dhe
vendoseni në skedarin /core/Page.php.