Controller dalam Framework MVC Sendiri di PHP
Seperti yang sudah Anda ketahui, semua controller dalam
framework kita memiliki metode render, yang
perlu dipanggil untuk mengirim data ke view.
Metode ini diwariskan oleh controller pengguna kita
dari kelas induk Controller,
yang berada di dalam inti. Mari kita buat kelas ini:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
Seperti yang Anda lihat, metode render menerima
nama view dan data untuk
ditampilkan sebagai parameternya. Biarkan metode ini mengembalikan
objek dari kelas khusus Page, di
dalamnya akan berisi informasi tentang tampilan
data dari aksi controller. Di kelas ini
akan berisi nama view, data,
serta judul halaman dan nama file layout
situs:
<?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;
}
}
?>
Maka kode dari metode render kita akan
terlihat seperti ini:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
Saya jelaskan, apa yang terjadi di sini. Nama view
dan data datang sebagai parameter metode. Namun,
di controller pengguna juga ditetapkan
judul halaman - dengan menulis properti
title. Artinya, di $this->title
akan berisi judul, yang akan kita teruskan
ke konstruktor kelas Page.
Ada juga nuansa dengan layout. Seperti yang Anda ketahui,
framework kita menggunakan layout dari file
default.php. Sebenarnya, setiap
aksi dapat memiliki layout yang berbeda. Untuk
itu, perlu dalam aksi itu sendiri di properti layout
menuliskan nama layout yang lain.
Bagaimana ini dicapai: controller induk kita
memiliki properti layout, secara default
bernilai 'default.php'. Ini
akan menjadi layout default. Namun, jika
aksi controller pengguna menggantikan
nilai properti layout, maka layout-nya
akan menjadi berbeda.
Salin kode kelas Controller saya dan tempatkan di file
/core/Controller.php.
Salin kode kelas Page saya dan
tempatkan di file /core/Page.php.