PHP'de Kendi MVC Framework'ümüzde Kontrolcüler
Bildiğiniz gibi, framework'ümüzdeki tüm kontrolcüler,
verileri görünüme göndermek için çağrılması gereken
render metoduna sahiptir. Bu metod, kullanıcı tanımlı
kontrolcülerimiz tarafından, çekirdekte bulunan
Controller ebeveyn sınıfından kalıtılır.
Hadi bu sınıfı yapalım:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
Gördüğünüz gibi, render metodu parametre olarak
görünüm adını ve görüntülenecek verileri alır.
Bu metodun, kontrolcü işleminin veri görünümü
hakkında bilgi içeren özel bir Page sınıfı
nesnesi döndürmesine izin verin. Bu sınıf,
görünüm adını, verileri, sayfa başlığını ve
site düzeni dosyasının adını içerecek:
<?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;
}
}
?>
O zaman render metodumuzun kodu şu şekilde görünecek:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
Burada neler olduğunu açıklayayım. Görünüm adı
ve veriler metod parametreleri olarak geliyor.
Ancak, kullanıcı kontrolcüsünde ayrıca bir
sayfa başlığı da belirlenir - title
özelliğine yazılarak. Bu, $this->title
içinde, Page sınıfının yapıcısına
ileteceğimiz başlığın bulunacağı anlamına gelir.
Düzen (layout) ile ilgili nüanslar da var.
Bildiğiniz gibi, framework'ümüz default.php
dosyasından bir düzen kullanır. Aslında, her
işlemin farklı bir düzeni olabilir. Bunun için,
işlemin kendi içinde layout özelliğine
başka bir düzen adı yazılması gerekir.
Bu nasıl sağlanır: ebeveyn kontrolcümüzün,
varsayılan olarak 'default.php' değerine
sahip olan bir layout özelliği vardır.
Bu varsayılan düzen olacaktır. Ancak, kullanıcı
kontrolcüsünün bir işlemi layout özelliğinin
değerini geçersiz kılarsa, düzen de farklı olacaktır.
Controller sınıfımın kodunu kopyalayın ve
/core/Controller.php dosyasına yerleştirin.
Page sınıfımın kodunu kopyalayın ve
/core/Page.php dosyasına yerleştirin.