Jednoduché smerovanie v engine v PHP
V predchádzajúcej lekcii bola na našej stránke iba jedna skupina URL. Samozrejme, zvyčajne na stránke býva niekoľko typov adries.
Každá skupina adries bude spracovaná vlastným regulárnym výrazom, ktoré sa nazývajú routy. Zodpovedajúci proces priraďovania routov a kódu pre ich spracovanie sa nazýva routing.
Povedzme, že máme napríklad dva typy adries. Pre každú skupinu napíšme vlastný rout:
<?php
if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
// jedna stránka podľa slugu
}
if (preg_match('#^/page/all$#', $url, $params)) {
// zoznam všetkých stránok
}
?>
Pre pohodlie presunieme kód spracovania každého routu do samostatného súboru:
<?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';
}
?>
Svojim výsledkom by mali pripájané súbory vracať pole s titulkom a obsahom stránky.
Napíšme kód prvého súboru, ktorý zobrazí jednu stránku podľa jej slugu:
<?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;
?>
A teraz napíšme kód druhého súboru, ktorý zobrazí zoznam odkazov na všetky stránky:
<?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;
?>
Po vykonaní jednej z podmienok bude v premennej
$page vždy pole z jednej
štruktúry. Použime toto pole na to, aby sme
dosadili titulok a obsah do šablóny stránky:
<?php
$layout = file_get_contents('layout.php');
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
echo $layout;
?>
Dajme všetko dokopy a získame nasledujúci kód:
<?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;
?>
Nech máte stránku s používateľmi. Vytvorte stránku pre zobrazenie jedného používateľa, stránku pre výpis všetkých používateľov a stránku s formulárom pre pridanie nového používateľa.