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

Code Igniter: URI Routing, callback, verbi HTTP e percorsi

Code Igniter: come sfruttare l'URI Routing, il callback, i verbi HTTP e i percorsi nella rimappatura degli URL sviluppando una logica personalizzata.
Code Igniter: come sfruttare l'URI Routing, il callback, i verbi HTTP e i percorsi nella rimappatura degli URL sviluppando una logica personalizzata.
Link copiato negli appunti

I callback

Oltre ad utilizzare wildcards o espressioni regolari in modo statico, Code Igniter consente di sfruttare una logica dinamica di elaborazione degli URL tramite l'impostazione di callbacks. Un callback è una funzione richiamata al momento dell'elaborazione che deve restituire un valore stringa che rappresenta il valore finale a cui reindirizzare l'applicazione.

Invece di impostare staticamente una stringa possiamo usare una funzione che la calcola e la restituisce dinamicamente.

$route['prodotti/([a-zA-Z]+)/modifica/(\d+)'] = function ($product_type, $id)
{
        return 'catalogo/modifica_prodotto/' . strtolower($product_type) . '/' . $id;
};

In questo caso, se ci troviamo ad esempio su prodotti/scarpe/modifca/10 verrà richiamato catalogo/modifica_prodotto/scarpe/10. La funzione callback accetta tanti parametri quanti sono i match (le corrispondenze trovate nell'URL tramite il parsing dell'espressione regolare) della stringa elaborata. Nell'esempio precedente i match sono 2: la stringa del primo segmento e il valore numerico dell'ultimo segmento. I match/corrispondenze sono identificati dal contenuto tra parentesi tonde.

I callbacks, usati con le espressioni regolari, sono dunque uno strumento per gestire dinamicamente la personalizzazione degli URL.

I "verbi HTTP"

Nel contesto della gestione degli URL Code Igniter permette di usare anche i verbi HTTP, ovvero i metodi di richiesta HTTP (in PHP nativo puoi lavorare con essi tramite gli array globali $_GET, $_POST, $_REQUEST). E' possibile gestire sia metodi standard, GET, POST, PUT, DELETE E PATCH, sia crearne di personalizzati.

Per utilizzare questa funzionalità occorre aggiungere un indice all'elemento desiderato dell'array $route. Se vogliamo rimappare un URL specifico quando a questo viene fornita una richiesta PUT o POST agiremo nel modo seguente:

// rimappa a prodotti/aggiungi quando viene eseguita una richiesta HTTP PUT
$route['prodotti']['put'] = 'prodotti/aggiungi';  
// rimappa a prodotti/aggiungipost quando viene eseguita una richiesta HTTP POST
$route['prodotti']['post'] = 'prodotti/aggiungipost';

Una richiesta PUT all'URL "prodotti" richiamerà il metodo aggiungi del Controller Prodotti, mentre una richiesta POST richiamerà aggiungipost.

Vediamo un esempio in cui utilizzare sia una wildcard, nell'indice che identifica l'URL, sia una richiesta HTTP:

$route['prodotti/(:num)']['DELETE'] = 'prodotti/elimina/$1';

In questo caso una richiesta HTTP DELETE all'URL che presenta come primo segmento la stringa prodotti seguita da un valore numerico, sarà rimappata verso il metodo elimina del controller Prodotti, a cui verrà passato il valore numerico corrisposto (match) come primo parametro.

I verbi HTTP sono opzionali e case-insensitive: scrivere 'post' o 'POST' non fa alcuna differenza.

Percorsi riservati

Nell'ambito della gestione e della rimappatura degli URL esistono 3 percorsi riservati e non sarà possibile utilizzare questi indici come parte delle elaborazioni:

  • 'default_controller';
  • '404_override';
  • 'translate_uri_dashes'.

$route['default_controller'] punta alla locazione che verrà richiamata quando l'URL non contiene segmenti, come nel caso dell'URL root. Si può impostare tale valore con la sintassi controllerName/methodName o semplicemente con controllerName. Nel secondo caso verrà richiamato il metodo di default index dichiarato nel Controller:

// chiama Prodotti::welcome
$route['default_controller'] = 'prodotti/welcome';
// chiama Prodotti::index
$route['default_controller'] = 'prodotti';

$route['404_override'] indica quale Controller deve essere richiamato se il Controller indicato nell'URL non esiste. E' una funzionalità utile per gestire richieste a URL non previsti dal sistema. Utilizzando questo percorso la pagina 404 di default verrà sovrascritta, ma non verrà alterata la funzione interna show_404 che richiamerà la View error_404 in application/views/errors/error_404.php.

$route['translate_uri_dashes'] è un percorso leggermente differente che accetta valori booleani. Questo parametro consente di sostituire automaticamente i caratteri "-" (dashes) con "_" (underscores) sia nei Controller che nei segmenti degli URL, risparmiando su eventuali controlli da aggiungere all'array $routes. Dato che i dashes non sono accettati come caratteri validi per nomi di classi o metodi, generando fatal errors se utilizzati, questa funzionalità risulta obbligatoria nel caso analizzato.

$route['translate_uri_dashes'] = FALSE;

Code Igniter offre quindi ampia libertà quando si tratta di rimappare URL. Non si è obbligati a seguire logiche di default, creando invece logiche personali accessibili solo dall'applicazione. Questo comporta vantaggi soprattutto per la sicurezza: con la gestione degli errori 404 è possibile limitare la scelta dei segmenti solo a determinati campi, mentre con la rimappatura verranno richiamati Controller privati la cui esistenza è nota solo agli sviluppatori.

Ti consigliamo anche