Eenvoudige routing in 'n enjin in PHP
In die vorige les was daar slegs een groep URLs op ons webwerf. Natuurlik is daar gewoonlik verskeie tipes adresse op 'n webwerf.
Elke groep adresse sal hanteer word deur 'n eie reguliere uitdrukking, wat genoem word roetes. Gevolglik word die proses van die passing van roetes en die kode vir die hantering daarvan genoem routing.
Kom ons sê, byvoorbeeld, ons het twee tipes adresse. Kom ons skryf 'n eie roete vir elke groep:
<?php
if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
// een bladsy volgens die slak
}
if (preg_match('#^/page/all$#', $url, $params)) {
// lys van alle bladsye
}
?>
Vir gerief sal ons die kode vir die hantering van elke roete in 'n aparte lêer plaas:
<?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';
}
?>
Die ingeslote lêers moet as hul resultaat 'n skikking met die titel en inhoud van die bladsy teruggee.
Kom ons skryf die kode van die eerste lêer, wat een bladsy volgens sy slak vertoon:
<?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;
?>
En nou skryf ons die kode van die tweede lêer, wat 'n lys van skakels na alle bladsye vertoon:
<?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' => 'alle bladsye',
'content' => $content
];
return $page;
?>
Na die uitvoering van een van die voorwaardes sal daar in die veranderlike
$page altyd 'n skikking van een
struktuur wees. Ons gebruik hierdie skikking om
die titel en inhoud in die webwerf-sjabloon te plaas:
<?php
$layout = file_get_contents('layout.php');
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
echo $layout;
?>
Kom ons voeg alles saam en kry die volgende kode:
<?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;
?>
Kom ons sê jy het 'n webwerf met gebruikers. Skep 'n bladsy om een gebruiker te wys, 'n bladsy om alle gebruikers te vertoon en 'n bladsy met 'n vorm om 'n nuwe gebruiker by te voeg.