PHP dasturida oddiy routing
Oldingi darsda bizning saytimizda faqat bitta URL guruhi mavjud edi. Albatta, odatda saytda bir nechta turdagi manzillar bo'ladi.
Har bir manzillar guruhi o'zining muntazam ifodasi bilan qayta ishlanadi, ular route deb ataladi. Shunga mos ravishda routelar va ularni qayta ishlash uchun kodni moslashtirish jarayoni routing deb ataladi.
Faraz qilaylik, masalan, bizda ikkita turdagi manzillar mavjud. Keling, har bir guruh uchun o'z routingini yozamiz:
<?php
if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
// slug bo'yicha bitta sahifa
}
if (preg_match('#^/page/all$#', $url, $params)) {
// barcha sahifalar ro'yxati
}
?>
Qulaylik uchun har bir routingni qayta ishlash kodini alohida faylga chiqaramiz:
<?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';
}
?>
Ulanish fayllari o'z natijasi sifatida sahifa sarlavhasi va kontentidan iborat massivni qaytarishi kerak.
Keling, uning slug'i bo'yicha bitta sahifani chiqaradigan birinchi fayl kodini yozamiz:
<?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;
?>
Endi barcha sahifalarga havolalar ro'yxatini chiqaradigan ikkinchi fayl kodini yozamiz:
<?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' => 'barcha sahifalar',
'content' => $content
];
return $page;
?>
Shartlardan birini bajarilishidan so'ng o'zgaruvchida
$page har doim bitta tuzilishdan iborat massiv bo'ladi.
Ushbu massivdan sayt shablonida sarlavha va kontentni
almashtirish uchun foydalanamiz:
<?php
$layout = file_get_contents('layout.php');
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
echo $layout;
?>
Keling hammasini birlashtiramiz va quyidagi kodni olamiz:
<?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;
?>
Faraz qilaylik, sizda foydalanuvchilar bilan sayt mavjud. Bitta foydalanuvchini ko'rsatish sahifasi, barcha foydalanuvchilarni chiqarish sahifasi va yangi foydalanuvchi qo'shish uchun forma sahifasini yarating.