Rutare simplă în motorul în PHP
În lecția precedentă pe site-ul nostru era doar un singur grup de URL-uri. Desigur, de obicei pe site există mai multe tipuri de adrese.
Fiecare grup de adrese va fi procesat cu propria expresie regulată, care se numesc rute. În consecință procesul de potrivire a rutelor și a codului pentru procesarea lor se numește rutare.
Să presupunem, de exemplu, că avem două tipuri de adrese. Să scriem o rută pentru fiecare grup:
<?php
if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
// o pagină după slug
}
if (preg_match('#^/page/all$#', $url, $params)) {
// lista tuturor paginilor
}
?>
Pentru comoditate, vom muta codul de procesare al fiecărei rute într-un fișier separat:
<?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';
}
?>
Fișierele incluse trebuie să returneze un array cu titlul și conținutul paginii.
Să scriem codul primului fișier, care afișează o pagină după slug-ul ei:
<?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;
?>
Și acum să scriem codul celui de-al doilea fișier, care afișează lista de link-uri către toate paginile:
<?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' => 'toate paginile',
'content' => $content
];
return $page;
?>
După executarea uneia dintre condiții în variabila
$page va fi întotdeauna un array cu aceeași
structură. Vom folosi acest array pentru a
înlocui titlul și conținutul în șablonul site-ului:
<?php
$layout = file_get_contents('layout.php');
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
echo $layout;
?>
Să adunăm totul împreună și să obținem următorul cod:
<?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;
?>
Să presupunem că aveți un site cu utilizatori. Realizați o pagină pentru afișarea unui singur utilizator, o pagină pentru afișarea tuturor utilizatorilor și o pagină cu un formular pentru adăugarea unui nou utilizator.