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' => 'бардык барактар',
'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;
?>
Сизде колдонуучулар бар сайт бар деп коёлу. Бир колдонуучуну көрсөтүүчү баракты, бардык колдонуучуларды чыгаруучу баракты жана жаңы колдонуучуну кошуу үчүн формасы бар баракты жасаңыз.