⊗ppPmSDRt 444 of 447 menu

Routing semplice nel motore in PHP

Nella lezione precedente sul nostro sito c'era solo un gruppo di URL. Naturalmente, di solito un sito ha diversi tipi di indirizzi.

Ogni gruppo di indirizzi sarà gestito con la propria espressione regolare, che sono chiamate route. Di conseguenza, il processo di corrispondenza delle route e del codice per la loro gestione si chiama routing.

Supponiamo, ad esempio, di avere due tipi di indirizzi. Scriviamo una route per ogni gruppo:

<?php if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) { // una pagina per slug } if (preg_match('#^/page/all$#', $url, $params)) { // elenco di tutte le pagine } ?>

Per comodità, spostiamo il codice di gestione di ogni route in un file separato:

<?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'; } ?>

I file inclusi devono restituire come risultato un array con il titolo e il contenuto della pagina.

Scriviamo il codice del primo file, che mostra una singola pagina in base al suo slug:

<?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; ?>

Ora scriviamo il codice del secondo file, che mostra un elenco di link a tutte le pagine:

<?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' => 'tutte le pagine', 'content' => $content ]; return $page; ?>

Dopo l'esecuzione di una delle condizioni, nella variabile $page ci sarà sempre un array con una struttura. Usiamo questo array per sostituire il titolo e il contenuto nel template del sito:

<?php $layout = file_get_contents('layout.php'); $layout = str_replace('{{ title }}', $page['title'], $layout); $layout = str_replace('{{ content }}', $page['content'], $layout); echo $layout; ?>

Mettiamo tutto insieme e otteniamo il seguente codice:

<?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; ?>

Supponiamo di avere un sito con utenti. Crea una pagina per mostrare un singolo utente, una pagina per elencare tutti gli utenti e una pagina con un modulo per aggiungere un nuovo utente.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta