Egyszerű útválasztás PHP motorban
Az előző leckében a weboldalunkon csak egy URL csoport volt. Természetesen egy weboldalon általában többféle cím típus található.
Minden címcsoportot a saját reguláris kifejezésével fogunk feldolgozni, amelyeket útvonalaknak (route) nevezünk. Ennek megfelelően az útvonalak és a feldolgozó kódjuk összekapcsolásának folyamatát útválasztásnak (routing) hívjuk.
Tegyük fel például, hogy kétféle címünk van. Írjunk minden csoporthoz saját útvonalat:
<?php
if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
// egy oldal a slug alapján
}
if (preg_match('#^/page/all$#', $url, $params)) {
// az összes oldal listája
}
?>
A kényelem kedvéért minden útvonal feldolgozó kódját tegyük külön fájlba:
<?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';
}
?>
A betöltött fájloknak egy tömböt kell visszaadniuk eredményként, amely tartalmazza az oldal címét és tartalmát.
Írjuk meg az első fájl kódját, amely kiírja egy oldalt a slugja alapján:
<?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;
?>
Most írjuk meg a második fájl kódját, amely kiírja az összes oldalra mutató link listáját:
<?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' => 'összes oldal',
'content' => $content
];
return $page;
?>
Az egyik feltétel végrehajtása után a
$page változóban mindig egy struktúrájú
tömb lesz. Használjuk ezt a tömböt, hogy
behelyettesítsük a címet és a tartalmat a weboldal sablonjába:
<?php
$layout = file_get_contents('layout.php');
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
echo $layout;
?>
Gyűjtsük össze az egészet, és a következő kódot kapjuk:
<?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;
?>
Tegyük fel, hogy van egy weboldalad felhasználókkal. Készíts egy oldalt egy felhasználó megjelenítéséhez, egy oldalt az összes felhasználó listázásához és egy oldalt egy új felhasználó hozzáadására szolgáló űrlappal.