0Pricing
PHP Academy · Pelajaran

Pola Templat: Memisahkan Logika dari Tampilan

Pindahkan logika bisnis ke file PHP dan jaga agar templat HTML tetap rapi.

Pola Templat: Memisahkan Logika dari Tampilan adalah pelajaran PHP Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar PHP Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus PHP Academy mencakup 4 pelajaran total.

Mengapa Logika Dipisahkan dari Tampilan?

Mencampurkan kueri basis data, logika bisnis, dan HTML dalam berkas yang sama menyebabkan:

  • Kode spageti yang sulit dibaca
  • Kesulitan dalam menguji dan menggunakan ulang logika
  • Kesalahan keamanan ketika validasi dilewati

Solusinya: tempatkan setiap tanggung jawab pada lapisannya sendiri.

Pola Templat Sederhana

Jalankan semua logika PHP terlebih dahulu, lalu tampilkan 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'; ?>

Memisahkan Berkas Pengontrol dan Tampilan

Pisahkan menjadi berkas pengontrol dan berkas tampilan:

// 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!

Menyiapkan Data Tampilan

Format semua data di lapisan logika sebelum mengirimkannya ke tampilan:

<?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';

Pola Fungsi Templat

Bungkus perenderan tampilan dalam sebuah fungsi agar lebih mudah digunakan ulang:

<?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'],
]);

Mesin Templat dengan Penyanggaan Output

Render sebuah templat dan kembalikan hasilnya sebagai string:

<?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');

Kapan Menggunakan Mesin Templat

Untuk situs sederhana, pembuatan templat bawaan PHP sudah memadai. Pertimbangkan Twig atau Blade ketika:

  • Anda menginginkan escape otomatis secara default
  • Perancang perlu mengedit templat tanpa memahami PHP
  • Anda memerlukan pewarisan templat dan makro
  • Proyek memiliki banyak tampilan dan terus berkembang

Contoh Twig

Twig (digunakan oleh Symfony) menyediakan sintaks yang bersih dengan escape otomatis:

<?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

Tata letak MVC minimal untuk proyek 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)

Pola Pengontrol Depan

Arahkan 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 Tanggung Jawab Tunggal

Setiap berkas seharusnya memiliki satu alasan untuk diubah:

  • Model: hanya berubah ketika struktur data atau logika kueri berubah
  • Pengontrol: hanya berubah ketika logika penanganan permintaan berubah
  • Tampilan: hanya berubah ketika antarmuka pengguna atau tata letak berubah

Dengan demikian, setiap bagian lebih mudah diuji dan dipelihara secara mandiri.

Pemeriksaan Singkat

Apa manfaat utama memisahkan logika PHP dari kode tampilan HTML?

Rangkuman: Pola Templat

Hal-hal penting:

  • Jalankan semua logika terlebih dahulu, lalu tampilkan HTML
  • Pisahkan menjadi berkas pengontrol dan tampilan
  • Gunakan fungsi render() dengan extract()
  • Penyanggaan output menangkap HTML yang dirender
  • Pertimbangkan Twig/Blade untuk proyek yang lebih besar
  • Pengontrol depan mengarahkan semua permintaan ke penangan

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pola Templat: Memisahkan Logika dari Tampilan” gratis?

Ya — teks lengkap “Pola Templat: Memisahkan Logika dari Tampilan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus PHP Academy, upgrade ke CoddyKit PRO. Kursus PHP Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pola Templat: Memisahkan Logika dari Tampilan”?

Pindahkan logika bisnis ke file PHP dan jaga agar templat HTML tetap rapi. Kamu berlatih PHP Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai PHP Academy?

Tidak diperlukan pengalaman sebelumnya. PHP Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Pola Templat: Memisahkan Logika dari Tampilan” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran PHP Academy ini?

Ya. Setiap pelajaran PHP Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Tag PHP dan Sintaks Penyematan
  2. HTML Dinamis dengan Perulangan PHP
  3. Menyertakan dan Memerlukan File
  4. Pola Templat: Memisahkan Logika dari Tampilan
← Kembali ke PHP Academy