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:

/core/Controller.php<?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:

/core/Page.php<?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:

/core/Controller.php<?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.

Задание 1

Controller sınıfımın kodunu kopyalayın ve /core/Controller.php dosyasına yerleştirin.

Задание 2

Page sınıfımın kodunu kopyalayın ve /core/Page.php dosyasına yerleştirin.