Paprastas maršrutizavimas PHP variklyje
Ankstesnėje pamokoje mūsų svetainėje buvo tik viena URL grupa. Žinoma, paprastai svetainėje būna kelių tipų adresai.
Kiekvieną adresų grupę apdoros savo reguliari išraiška, kuri vadinama maršrutais. Atitinkamai maršrutų atitikimo ir jų apdorojimo kodo suderinimo procesas vadinamas maršrutizavimu.
Tarkime, pavyzdžiui, kad turime dviejų tipų adresus. Kiekvienai grupei parašykime savo maršrutą:
<?php
if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
// vienas puslapis pagal slug
}
if (preg_match('#^/page/all$#', $url, $params)) {
// visų puslapių sąrašas
}
?>
Patogumui kiekvieno maršruto apdorojimo kodą išskirkime į atskirą failą:
<?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';
}
?>
Prijungiami failai savo rezultatu turi grąžinti masyvą su puslapio pavadinimu ir turiniu.
Parašykime pirmojo failo kodą, kuris atvaizduoja vieną puslapį pagal jo slug:
<?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;
?>
O dabar parašykime antrojo failo kodą, kuris atvaizduoja visų puslapių nuorodų sąrašą:
<?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' => 'visi puslapiai',
'content' => $content
];
return $page;
?>
Įvykdžius vieną iš sąlygų kintamajame
$page visada bus masyvas iš vienos
struktūros. Naudokime šį masyvą, kad
pastatytume pavadinimą ir turinį į svetainės šabloną:
<?php
$layout = file_get_contents('layout.php');
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
echo $layout;
?>
Sujunkime viską kartu ir gausime tokį kodą:
<?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;
?>
Tarkime, kad turite svetainę su vartotojais. Sukurkite pushlapį vieno vartotojo rodymui, pushlapį visų vartotojų išvedimui ir pushlapį su forma naujo vartotojo pridėjimui.