Lihtne marsruutimine PHP mootoris
Eelmises õppetükis oli meil saidil ainult üks URL-ide rühm. Loomulikult on tavalisel saidil mitu tüüpi aadresse.
Iga aadressirühm töödeldakse oma regulaaravaldisega, mida nimetatakse marsruutideks. Vastavalt protsessi marsruutide sobitamist ja nende töötlemiseks mõeldud koodi nimetatakse marsruutimiseks.
Oletame, et meil on näiteks kaks tüüpi aadresse. Kirjutame iga rühma jaoks oma marsruudi:
<?php
if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
// üks leht slangi järgi
}
if (preg_match('#^/page/all$#', $url, $params)) {
// kõikide lehtede nimekiri
}
?>
Mugavuse huvides viime iga marsruudi töötlemise koodi eraldi faili:
<?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';
}
?>
Kaasatavad failid peaksid oma tulemusena tagastama massiivi lehe pealkirja ja sisuga.
Kirjutame esimese faili koodi, mis väljastab ühe lehe selle slangi järgi:
<?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;
?>
Ja nüüd kirjutame teise faili koodi, mis väljastab linkide nimekirja kõikidele lehtedele:
<?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' => 'kõik lehed',
'content' => $content
];
return $page;
?>
Pärast ühe tingimuse täitmist on muutujas
$page alati massiiv ühest
struktuurist. Kasutame seda massiivi, et
asendada pealkiri ja sisu saidi mallis:
<?php
$layout = file_get_contents('layout.php');
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
echo $layout;
?>
Kogume kõik kokku ja saame järgmise koodi:
<?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;
?>
Oletame, et teil on kasutajatega sait. Tehke leht ühe kasutaja kuvamiseks, leht kõikide kasutajate väljastamiseks ja leht vormiga uue kasutaja lisamiseks.