Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

URI Routing in Code Igniter

PHP. Analizziamo la procedura di URI Routing del framework PHP Code Igniter che permette di personalizzarne il comportamento nella gestione degli URL.
PHP. Analizziamo la procedura di URI Routing del framework PHP Code Igniter che permette di personalizzarne il comportamento nella gestione degli URL.
Link copiato negli appunti

Logica di default vs logica personalizzata

Come si è potuto osservare nelle precedenti lezioni, gli URL hanno un ruolo fondamentale nella logica e nella struttura di un'applicazione scritta con Code Igniter. Nella logica di default, dagli URL viene ricavato il nome del Controller da utilizzare, il metodo di questo Controller da richiamare ed eventuali parametri da passare.

Questa struttura funziona molto bene nella maggior parte delle situazioni, tuttavia esistono dei casi in cui lo sviluppatore ha la necessità di modificare il comportamento standard, sia per scelta personale oppure dettata dalla composizione degli URL stessi. Se ad esempio abbiamo una struttura simile alla seguente:

tuosito.com/prodotti/1/
tuosito.com/prodotti/2/
tuosito.com/prodotti/3/
tuosito.com/prodotti/4/

Il secondo parametro ovviamente non rappresenta il nome di un metodo del Controller Prodotti, ma in questo caso un parametro che indica l'ID del prodotto del quale caricare le informazioni. Come ovviare dunque al problema, se si vuole mantenere questo tipo di URL?

La soluzione sta nella procedura di URI Routing che permette di personalizzare il comportamento di default di Code Igniter.

Settare la nuova configurazione

Per iniziare portiamoci in application/config/routes.php, percorso che contiene il file di configurazione relativo alla gestione degli URL. Questo file contiene l'array $route che permette di specificare i criteri di gestione personalizzati, attraverso la manipolazione dei suoi indici. Esistono 2 metodi con cui possiamo personalizzare il comportamento di Code Igniter: attraverso le wildcard e tramite le espressioni regolari.

La logica è la seguente: nell'array $route gli indici rappresentano gli URL a cui trovare una corrispondenza, mentre i valori contengono la destinazione alla quale l'applicazione deve essere rindirizzata.

Usare le wildcard

Senza fare uso di espressioni regolari, possiamo trovare delle corrispondenzze sia utilizzando valori letterali completi, sia utilizzando la sintassi delle wildcards. Vediamo il seguente esempio:

$route['prodotti/:num'] = 'catalogo/info';

In questo caso stiamo usando nel primo segmento un valore letterale che indica la prima parte del nostro URL, nel secondo usiamo la wildcard (:num) che trova una corrispondenza con valori numerici. Dunque, gli URL precedenti andranno a richiamare il Controller Catalogo e il metodo info che si occuperanno della logica di gestione.

Se vogliamo passare esplicitamente il segmento specifico che corrisponde a :num come parametro del metodo info, dobbiamo aggiungere un ulteriore segmento che lo rappresenta. Utilizzando il simbolo del dollaro $ seguito da un numero, passiamo la corrispondenza indicata:

$route['prodotti/:num'] = 'catalogo/info/$1';

In questo caso $1 rappresenta la prima corrispondenza trovata dalla wildcard :num.

Oltre a :num, che trova una corrispondenza con i valori numerici, abbiamo anche la wildcard :any che trova una corrispondenza con i caratteri (fatta eccezione per il carattere "/" che funge da separatore di segmenti).

Usare le espressioni regolari

Per aumentare la potenza del motore di ricerca e configurazione degli URL, e per configurare praticamente qualsiasi logica di gestione, possiamo usare le espressioni regolari. In realtà, anche le wildcard :num e :any non sono altro che puntatori a delle espressioni regolari: :any punta a [^/]+ e :num punta a [0-9]+. Vediamo un semplice esempio:

$route['prodotti/([a-z]+)/(\d+)'] = '$1/id_$2';

In questo caso se l'utente richiama ad esempio l'URL prodotti/scarpe/10 non verrà richiamato il Controller Prodotti, col metodo scarpe e il parametro 10, ma verrà chiamato il Controller Scarpe (che corrisponde al valore del secondo segmento) con il metodo id_10 (che corrisponde al valore del secondo segmento).

Il segmento ([a-z]+) indica una moltitudine di caratteri, mentre il segmento (\d+) indica una moltitudine di cifre decimali.

Le possibilità offerte dal parser delle espressioni regolari sono infinite.

Ti consigliamo anche