PHP даги двигада содда роутинг
Аввалги дарсда бизнинг сайтимизда факат битта URLлар гурухи бор эди. Албатта, оддата сайтида bир неча турдаги манзиллар бўлади.
Ҳар бир манзиллар гурухи ўз регуляр ифодаси билан ишлов берилади, улар рутлар деб аталади. Мос равишда рутлар ва уларни ишлов бериш учун кодни мослаш жараёни рутинг деб аталади.
Масалан, бизда икки турдаги манзиллар бор деб фараз қилайлик. Келинг, ҳар бир гуруҳ учун ўз рутини ёзайлик:
<?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';
}
?>
Улангувчи файллар ўз натижаси сифатида саҳифанинг sарлавҳаси ва контенти бўлган массивни қайтариши керак.
Келинг, унинг слаги бўйича битта саҳифани чиқарувчи биринчи файл кодини ёзайлик:
<?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' => 'барча саҳифалар',
'content' => $content
];
return $page;
?>
Шартларнинг бири бажарилганидан кейин ўзгарувчида
$page ҳар доим битта структурадан таркиб топган
массив бўлади. Сайт шаблонига sарлавҳа ва контентни
қўйиш учун бу массивдан фойдаланамиз:
<?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;
?>
Сизда фойдаланувчилар бўлган сайт бор деб фараз қилайлик. Битта фойдаланувчини кўрсатиш учун саҳифа, барча фойдаланувчиларни чиқариш учун саҳифа ва янги фойдаланувчи қўшиш учун форма бўлган саҳифани яратинг.