Jednoduché routování v PHP engine
V předchozí lekci byla na našem webu pouze jedna skupina URL. Samozřejmě, obvykle na webu je několik typů adres.
Každá skupina adres bude zpracována vlastním regulárním výrazem, které se nazývají routy. Odpovídajícím způsobem proces porovnávání rout a kódu pro jejich zpracování se nazývá routování.
Předpokládejme, že máme například dva typy adres. Pojďme pro každou skupinu napsat vlastní rout:
<?php
if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
// jedna stránka podle slugu
}
if (preg_match('#^/page/all$#', $url, $params)) {
// seznam všech stránek
}
?>
Pro pohodlí vyjmeme kód zpracování každého routu do samostatného souboru:
<?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';
}
?>
Připojované soubory musí svým výsledkem vracet pole s titulem a obsahem stránky.
Pojďme napsat kód prvního souboru, který zobrazuje jednu stránku podle jejího 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 teď napišme kód druhého souboru, který zobrazuje seznam odkazů na všechny 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 splnění jedné z podmínek bude v proměnné
$page vždy pole z jedné
struktury. Použijme toto pole k
dosazení titulu a obsahu do šablony webu:
<?php
$layout = file_get_contents('layout.php');
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
echo $layout;
?>
Pojďme to všechno dát dohromady a dostaneme následující 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;
?>
Předpokládejme, že máte web s uživateli. Vytvořte stránku pro zobrazení jednoho uživatele, stránku pro výpis všech uživatelů a stránku s formulářem pro přidání nového uživatele.