PHP Academy · Pelajaran

Corak Templat: Memisahkan Logik daripada Paparan

Alihkan logik perniagaan ke fail PHP dan pastikan templat HTML kemas.

Pelajaran 4 daripada 413 langkah

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 default

Struktur 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
Percuma untuk bermula

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

  1. Tag PHP dan Sintaks Pembenaman
  2. HTML Dinamik dengan Gelung PHP
  3. Menyertakan dan Memerlukan Fail
  4. Corak Templat: Memisahkan Logik daripada Paparan
← Kembali ke PHP Academy