Corak Templat: Memisahkan Logik daripada Paparan
Alihkan logik perniagaan ke fail PHP dan pastikan templat HTML kemas.
Corak Templat: Memisahkan Logik daripada Paparan ialah pelajaran PHP Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran PHP Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus PHP Academy merangkumi sejumlah 4 pelajaran.
Mengapa Logik Perlu Dipisahkan daripada Paparan?
Mencampurkan pertanyaan pangkalan data, logik perniagaan dan HTML dalam fail yang sama menyebabkan:
- Kod yang sukar dibaca dan berserabut
- Kesukaran menguji dan menggunakan semula logik
- Kesilapan keselamatan apabila pengesahan dilangkau
Penyelesaiannya: kekalkan setiap perkara dalam lapisannya sendiri.
Corak Templat Ringkas
Jalankan semua logik PHP dahulu, kemudian hasilkan HTML:
<?php
// --- LOGIC (top) ---
require 'config.php';
$userId = (int) ($_GET['id'] ?? 0);
$user = getUserById($userId);
if (!$user) {
http_response_code(404);
require '404.php';
exit;
}
$pageTitle = 'Profile: ' . $user['name'];
// --- VIEW (bottom) ---
require 'layout/header.php';
?>
<main>
<h1><?= htmlspecialchars($user['name']) ?></h1>
</main>
<?php require 'layout/footer.php'; ?>Mengasingkan Fail Pengawal dan Paparan
Pecahkan kepada fail pengawal dan fail paparan:
// profile.php (controller)
<?php
require 'config.php';
$userId = (int) ($_GET['id'] ?? 0);
$user = getUserById($userId);
$posts = getPostsByUser($userId);
if (!$user) { require '404.php'; exit; }
require 'views/profile.view.php';
// views/profile.view.php (view) — only HTML and echoes
// No DB calls allowed here!Menyediakan Data Paparan
Formatkan semua data dalam lapisan logik sebelum menghantarnya kepada paparan:
<?php
$user = getUserById($id);
$viewData = [
'userName' => htmlspecialchars($user['name']),
'avatarUrl' => $user['avatar'] ?? '/default.png',
'joinedDate' => date('F Y', strtotime($user['created_at'])),
'isAdmin' => in_array('admin', $user['roles']),
];
extract($viewData); // Makes $userName, $avatarUrl, etc.
require 'views/profile.view.php';Corak Fungsi Templat
Bungkus pemaparan paparan dalam fungsi untuk penggunaan semula yang lebih kemas:
<?php
function render(string $view, array $data = []): void {
extract($data); // Create variables from array
require __DIR__ . '/views/' . $view . '.php';
}
// Usage:
render('profile', [
'name' => $user['name'],
'email' => $user['email'],
]);Enjin Templat dengan Penimbalan Hasil
Render templat dan kembalikannya sebagai rentetan:
<?php
function renderToString(string $view, array $data = []): string {
extract($data);
ob_start();
require __DIR__ . '/views/' . $view . '.php';
return ob_get_clean();
}
$html = renderToString('email/welcome', ['name' => 'Alice']);
mail($to, 'Welcome!', $html, 'Content-Type: text/html');Bila Hendak Menggunakan Enjin Templat
Untuk tapak ringkas, penggunaan templat asli PHP sudah memadai. Pertimbangkan Twig atau Blade apabila:
- Anda mahukan pelolosan automatik secara lalai
- Pereka bentuk perlu mengedit templat tanpa pengetahuan PHP
- Anda memerlukan pewarisan templat dan makro
- Projek mempunyai banyak paparan dan semakin besar
Contoh Twig
Twig (digunakan oleh Symfony) menyediakan sintaks yang kemas dengan pelolosan automatik:
<?php
// After: composer require twig/twig
$loader = new Twig\Loader\FilesystemLoader('/templates');
$twig = new Twig\Environment($loader, ['cache' => '/tmp/twig']);
echo $twig->render('profile.html.twig', [
'user' => $user,
'posts' => $posts,
]);
// profile.html.twig:
// <h1>{{ user.name }}</h1> -- auto-escaped by defaultStruktur Direktori MVC
Reka letak MVC minimum untuk projek PHP biasa:
project/
controllers/
UserController.php -- handles request, calls model
models/
User.php -- database queries
views/
users/
profile.php -- display only, no logic
public/
index.php -- front controller (router)Corak Pengawal Hadapan
Halakan semua permintaan melalui satu titik masuk:
<?php
// public/index.php (front controller)
require __DIR__ . '/../vendor/autoload.php';
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$routes = require '../routes.php';
if (isset($routes[$uri])) {
[$controller, $action] = $routes[$uri];
(new $controller)->$action();
} else {
http_response_code(404);
require '../views/404.php';
}Prinsip Tanggungjawab Tunggal
Setiap fail sepatutnya mempunyai satu sebab untuk berubah:
- Model: hanya berubah apabila struktur data atau logik pertanyaan berubah
- Pengawal: hanya berubah apabila logik pengendalian permintaan berubah
- Paparan: hanya berubah apabila antara muka pengguna atau reka letak berubah
Ini menjadikan setiap bahagian lebih mudah diuji dan diselenggara secara berasingan.
Semakan Pantas
Apakah manfaat utama memisahkan logik PHP daripada kod paparan HTML?
Ringkasan: Corak Templat
Kesimpulan utama:
- Jalankan semua logik dahulu, kemudian hasilkan HTML
- Asingkan kepada fail pengawal dan paparan
- Gunakan fungsi render() dengan extract()
- Penimbalan hasil menangkap HTML yang dirender
- Pertimbangkan Twig/Blade untuk projek yang lebih besar
- Pengawal hadapan menghalakan semua permintaan kepada pengendali
Pelajari PHP dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 49
- Pelajaran
- 195
Soalan Lazim
Adakah pelajaran “Corak Templat: Memisahkan Logik daripada Paparan” percuma?
Ya — teks penuh “Corak Templat: Memisahkan Logik daripada Paparan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus PHP Academy, tingkat taraf kepada CoddyKit PRO. Kursus PHP Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Corak Templat: Memisahkan Logik daripada Paparan”?
Alihkan logik perniagaan ke fail PHP dan pastikan templat HTML kemas. Anda berlatih PHP Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan PHP Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran PHP Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Corak Templat: Memisahkan Logik daripada Paparan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran PHP Academy ini?
Ya. Setiap pelajaran PHP Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Tag PHP dan Sintaks Pembenaman
- HTML Dinamik dengan Gelung PHP
- Menyertakan dan Memerlukan Fail
- Corak Templat: Memisahkan Logik daripada Paparan