Pengawal dalam Kerangka MVC Sendiri di PHP
Seperti yang anda sudah tahu, semua pengawal dalam
kerangka kerja kami mempunyai kaedah render yang
perlu dipanggil untuk menghantar data ke pandangan.
Kaedah ini diwarisi oleh pengawal-pengawal pengguna kami
dari kelas induk Controller,
yang terletak dalam teras. Mari kita buat kelas ini:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
Seperti yang anda lihat, kaedah render menerima
nama pandangan dan data untuk
paparan sebagai parameter. Biarkan kaedah ini mengembalikan
objek kelas khas Page, di
mana maklumat tentang paparan data
tindakan pengawal akan terkandung. Kelas ini
akan mengandungi nama pandangan, data,
serta tajuk halaman dan nama fail dengan susun atur
tapak web:
<?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 kod untuk kaedah render kami akan
kelihatan seperti ini:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
Biar saya jelaskan apa yang berlaku di sini. Nama pandangan
dan data diterima sebagai parameter kaedah. Walau bagaimanapun,
tajuk halaman juga ditetapkan dalam pengawal pengguna -
dengan menulis nilai kepada sifat
title. Ini bermakna, $this->title
akan mengandungi tajuk yang kita hantar kepada
pembina kelas Page.
Terdapat juga nuansa dengan susun atur. Seperti yang anda tahu,
kerangka kerja kami menggunakan susun atur dari fail
default.php. Sebenarnya, setiap
tindakan boleh mempunyai susun atur yang lain. Untuk
melakukannya, anda perlu menulis nama susun atur lain ke dalam sifat layout
dalam tindakan itu sendiri.
Bagaimana ini dicapai: pengawal induk kami
mempunyai sifat layout, yang secara lalai
mempunyai nilai 'default.php'. Ini
akan menjadi susun atur lalai. Walau bagaimanapun, jika
tindakan pengawal pengguna mengubah nilai
sifat layout, maka susun atur juga
akan berbeza.
Salin kod kelas Controller saya dan letakkannya dalam fail
/core/Controller.php.
Salin kod kelas Page saya dan
letakkannya dalam fail /core/Page.php.