Login
Libri
Home Argomenti Generali URI Routing

URI Routing

Share

Solitamente esiste una relazione uno ad uno tra una stringa di URL ed il suo corrispettivo controller classe/metodo. I segmenti di un URI normalmente segueno il seguete schema:


example.com/class/function/id/

In alcuni casi, tuttavia, si potrebbe aver necessità di rimappare questa relazione chiamando una diversa classe/funzione invece di quella corrispondente all'URL.

Per esempio, poniamo il caso che si voglia avere i propri URLs con la seguente struttura:

example.com/product/1/
example.com/product/2/
example.com/product/3/
example.com/product/4/

Generalmente il secondo segmento dell'URL è riservato al nome della funzione, ma nell'esempio precedente si ha l'ID del prodotto. Affinché si possa procedere, CodeIgniter permette di rimappare l'URI.

Configurare le proprie regole di routing

Le regole di Routing sono definite nel file application/config/routes.php. Al suo interno è dichiarato un array chiamato $route che permette di specificare i propri criteri di routing. Le regole possono essere specificate utilizzando Jolly o Espressioni Regolari.

Jolly

Un tipico percorso Jolly potrebbe essere rappresentato come:


$route['product/:num'] = "catalog/product_lookup";

In un percorso, la chiave dell'array contiene l'URI da matchare, mentre il valore contiene la destinazione verso la quale deve essere dirottato. Nell'esempio precedente, se la parola "product" è posizionata nel primo segmento dell'URL e un numero si trova nel segondo segmento, verrà richiamata la classe "catalog" ed il metodo "product_lookup".

E' possibile confrontare caratteri alfanumerici oppure utilizzare tipi jolly:

:num
:any

:num confronterà segmenti contenenti solo numeri.
:any confronterà segmenti contenenti qualsiasi caratter.

Nota: Routes saranno richiamati nell'ordine con il quale sono stati definiti. I percorsi definiti prima avranno sepre la precedenza rispetto a quelli definiti successivamente.

Esempi

Di seguito alcuni esempi di routing:


$route['journals'] = "blogs";

Un URL contenente la parola "journals" nel primo segmento, verrà rimappata con la classe "blogs".


$route['blog/joe'] = "blogs/users/34";

Un URL contenente i segmenti blog/joe sarà rimappato con la classe "blogs" ed il metodo "users". Sarà impostato poi l'ID "34".


$route['product/:any'] = "catalog/product_lookup";

Un URL con "product" come primo segmento, e qualunque cosa nel secondo, verrà rimappato con la classe "catalog" ed il metodo "product_lookup".


$route['product/(:num)'] = "catalog/product_lookup_by_id/$1";

Un Url con "product" come primo segmento, e qualunque cosa nel secondo, verrà rimappato con la classe "catalog" ed il metodo "product_lookup_by_id" al quale verrà passato come variabile il valore del secondo segmento.

Importante: non utilizzare slash né all'inizio, né alla fine

Espressioni Regolari

E' possibile utilizzare le espressioni regolari per derfinire le regole di routing, se si preferisce. E' consentita ogni valida espressione regolare, cosi come i back-references.

Note: Se si utilizzano i back-references è necessario utilizzare la sintassi con il dollaro invece del doppio backslash.

Una tipica espressione regolare di routing potrebbe essere come la seguente:


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

Nell'esempio precedente, un URI simile a products/shirts/123 richiamerebbe la classe controller shirts e la funzione id_123.

È inoltre possibile combinare i caratteri jolly con le espressioni regolari.

Percorsi Riservati

Ci sono due percorsi riservati:


$route['default_controller'] = 'welcome';

Questo percorso indica quale classe controller deve essere richiamata se l'URI non contiene nessuna informazione, per esempio quando viene richiamato il proprio URL di root. Nell'esempio precedente verrà richiamata la classe "welcome". Si incoraggia ad utilizzare sempre un percorso di default, altrimenti apparirà la pagina 404 di default.


$route['scaffolding_trigger'] = 'scaffolding';

Questo percorso prevede che venga configurata una parola segreta, la quale sarà presente all'interno dellURL, che attiverà la funzione di scaffolding. Per maggiori dettagli sullo Scaffolding si rimanda alla sezione apposita.

Importante: I percorsi riservati devono venire prima di ogni percorso jollly o con espressioni regolari.

Ultimo aggiornamento ( Martedì 26 Ottobre 2010 04:42 )