PHP қозғалтқышындағы қарапайым маршрутизация
Біздің сайттағы алдыңғы сабақта тек бір URL тобы болды. Әрине, әдетте сайтта бірнеше түрлі адрестер болады.
Әрбір адрес тобы өз реттік өрнектерімен өңдіріледі, олар роуттар деп аталады. Тиісінше, роуттарды және оларды өңдеу кодын сәйкестендіру процесі роутинг деп аталады.
Мысалы, бізде екі түрлі адрес бар делік. Әр топ үшін өз роутын жазайық:
<?php
if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
// бір бет слағ бойынша
}
if (preg_match('#^/page/all$#', $url, $params)) {
// барлық беттер тізімі
}
?>
Ыңғайлылық үшін әрбір роутты өңдеу кодын бөлек файлға шығарайық:
<?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';
}
?>
Қосылатын файлдар нәтиже ретінде беттің тақырыбы мен мазмұны бар массив қайтаруы керек.
Оның слағы бойынша бір бетті шығаратын бірінші файлдың кодын жазайық:
<?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;
?>
Енді барлық беттерге сілтемелер тізімін шығаратын екінші файлдың кодын жазайық:
<?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' => 'all pages',
'content' => $content
];
return $page;
?>
Шарттардың бірі орындалғаннан кейін $page
айнымалысында әрқашан бір құрылымнан тұратын массив болады.
Сайт үлгісіне тақырып пен мазмұнды қою үшін
бұл массиві қолданайық:
<?php
$layout = file_get_contents('layout.php');
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
echo $layout;
?>
Барлығын жинап, келесі кодты аламыз:
<?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;
?>
Сізде пайдаланушылар бар сайт бар делік. Бір пайдаланушыны көрсету бетін, барлық пайдаланушылар тізімін шығару бетін және жаңа пайдаланушы қосу формасы бар бетті жасаңыз.