Едноставен рутинг во 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;
?>
Да речеме дека имате веб-страница со корисници. Направете страница за приказ на еден корисник, страница за приказ на сите корисници и страница со форма за додавање на нов корисник.