Penghalaan Mudah dalam Enjin PHP
Dalam pelajaran sebelumnya, laman web kami hanya mempunyai satu kumpulan URL. Sudah tentu, biasanya laman web mempunyai beberapa jenis alamat.
Setiap kumpulan alamat akan diproses dengan ungkapan biasa sendiri, yang dipanggil rout. Oleh itu, proses memadankan rout dan kod untuk memprosesnya dipanggil penghalaan.
Katakan, sebagai contoh, kami mempunyai dua jenis alamat. Mari tulis rout untuk setiap kumpulan:
<?php
if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
// satu halaman mengikut slug
}
if (preg_match('#^/page/all$#', $url, $params)) {
// senarai semua halaman
}
?>
Untuk kemudahan, mari asingkan kod pemprosesan setiap rout ke dalam fail berasingan:
<?php
if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
$page = include 'view/page/show.php';
}
if (preg_match('#^/page/all$#', $url, $params)) {
$page = include 'view/page/all.php';
}
?>
Fail yang disertakan mestilah mengembalikan array dengan tajuk dan kandungan halaman sebagai hasilnya.
Mari tulis kod fail pertama, yang memaparkan satu halaman mengikut slugnya:
<?php
$slug = $params[1];
$query = "SELECT * FROM pages WHERE slug='$slug'";
$res = mysqli_query($link, $query) or die(mysqli_error($link));
$page = mysqli_fetch_assoc($res);
return $page;
?>
Dan sekarang mari tulis kod fail kedua, yang memaparkan senarai pautan ke semua halaman:
<?php
$query = "SELECT slug, title FROM pages";
$res = mysqli_query($link, $query) or die(mysqli_error($link));
for ($data = []; $row = mysqli_fetch_assoc($res); $data[] = $row);
$content = '';
foreach ($data as $page) {
$content .= '
<div>
<a href="/page/' . $page['slug'] . '">' . $page['title'] . '</a>
</div>
';
}
$page = [
'title' => 'semua halaman',
'content' => $content
];
return $page;
?>
Selepas melaksanakan salah satu syarat, dalam pembolehubah
$page akan sentiasa ada array daripada satu
struktur. Mari gunakan array ini untuk
menggantikan tajuk dan kandungan ke dalam templat laman web:
<?php
$layout = file_get_contents('layout.php');
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
echo $layout;
?>
Mari kumpulkan semuanya dan dapatkan kod berikut:
<?php
$url = $_SERVER['REQUEST_URI'];
if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
$page = include 'view/page/show.php';
}
if (preg_match('#^/page/all$#', $url, $params)) {
$page = include 'view/page/all.php';
}
$layout = file_get_contents('layout.php');
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
echo $layout;
?>
Katakan anda mempunyai laman web dengan pengguna. Buat halaman untuk memaparkan satu pengguna, halaman untuk memaparkan semua pengguna dan halaman dengan borang untuk menambah pengguna baru.