Jednostavno rutiranje u PHP motoru
U prethodnoj lekciji na našem sajtu postojala je samo jedna grupa URL-ova. Naravno, obično na sajtu postoji nekoliko tipova adresa.
Svaka grupa adresa će biti obrađena svojim regularnim izrazom, koji se nazivaju rutama. Shodno tome, proces uparivanja ruta i koda za njihovu obradu naziva se rutiranjem.
Recimo, na primer, da imamo dva tipa adresa. Hajde za svaku grupu napišimo svoju rutu:
<?php
if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
// jedna stranica po slugu
}
if (preg_match('#^/page/all$#', $url, $params)) {
// spisak svih stranica
}
?>
Za praktičnost, izdvojimo kod obrade svake rute u poseban fajl:
<?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';
}
?>
Kao svoj rezultat, uključeni fajlovi moraju vratiti niz sa naslovom i sadržajem stranice.
Hajde da napišemo kod prvog fajla, koji prikazuje jednu stranicu po njenom 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 sada napišimo kod drugog fajla, koji prikazuje spisak linkova na sve stranice:
<?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' => 'sve stranice',
'content' => $content
];
return $page;
?>
Nakon izvršenja jednog od uslova u promenljivoj
$page uvek će biti niz iste
strukture. Iskoristimo ovaj niz da
ubacimo naslov i sadržaj u šablon sajta:
<?php
$layout = file_get_contents('layout.php');
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
echo $layout;
?>
Sastavimo sve zajedno i dobijamo sledeći 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;
?>
Recimo da imate sajt sa korisnicima. Napravite stranicu za prikaz jednog korisnika, stranicu za prikaz svih korisnika i stranicu sa formom za dodavanje novog korisnika.