Come creare un sistema di Routing in PHP in 140 caratteri di codice

Una delle fasi principali, nello sviluppo di applicazioni web, è la gestione di una tabella di routing capace di richiamare e collegare tra loro le innumerevoli funzionalità che una web application contiene. Pertanto, non è inusuale, trovarsi nella condizione di scrivere e progettare pagine in php e capire come collegarle tra loro. Apprendere le tecniche su come creare un sistema di routing è fondamentale per progettare web application stabili e funzionali.

Molti framework, come ad esempio CodeIgniter, Symphony e tanti altri ancora, hanno al loro interno un sistema di routing capace di svolgere questo compito egregiamente.

Di contro, però, la pesantezza e la gestione di questi framework, rende l’applicativo meno scalabile e difficilmente gestibile se gestito e progettato da più sviluppatori.

In questa guida ti presenterò un sistema di routing, il più piccolo e veloce al mondo, progettato in soli 140 caratteri.

1. Un Router PHP in soli 140 caratteri

Lo script che segue mette in piedi un sistema di routing, il più semplice mai realizzato in PHP. Come anticipato è scritto in soli 140 caratteri di puro codice PHP.

NON è affatto un buon router, non usarlo in un’applicazione reale, non viene nemmeno gestita l’eccezione. L’ho fatto solo per divertimento e per dimostrare la semplicità.

Ad ogni modo il codice del router, e questo:

class R{  
   function a($r,callable $c){$this->r[$r]=$c;}  
   function e(){$s=$_SERVER;$i='PATH_INFO';$p=isset($s\[$i])?$s[$i]:'/';$this->r[$p\]();}  
}

2. Come installare un Server web locale per provare il router

Prima di accingerti nella creazione e gestione del tuo primo router in PHP è necessario Installare un server web in locale. L’installazione è un’operazione più semplice di quanto tu possa immaginare, ad ogni modo, segui questo video tutorial che ti guiderà, passo-passo, nell’installazione di un server web in locale, avrai così la possibilità di trasformare il tuo computer in un vero e proprio server web capace di eseguire qualunque tipo di applicazione scritta in PHP.

3. Come implementare il Router

Per provare il Router non devi fare altro che creare un file index.php nella root del tuo server, copiare e incollare questo codice all’interno di index.php:

<?php

// -------------------------------------------
// Il codice che implementa il router.
// in 140 caratteri di codice PHP
// -------------------------------------------
class R {
   function a($r,callable $c){$this->r[$r]=$c;}
   function e(){$s=$_SERVER;$i='PATH_INFO';$p=isset($s\[$i])?$s[$i]:'/';$this->r[$p\]();}
}  
// -------------------------------------------
// Fine dei 140 caratteri di codice del router
// -------------------------------------------

// Istanzia un oggetto router  
$router = new R();

// Aggiungi una rotta con una callback function  
$router->a('/a', 'callbackFunction');

// Aggiungi una rotta con una closure  
$router->a('/b', function() {  
    echo 'Hello B';  
});

// Aggiungi la rotta alla homepage
$router->a('/', function() {  
    echo 'Hello World';  
});

// Aggiungi una rotta associata all’esecuzione 
// del metodo ‘bar’ della classe ‘Foo’
$router->a('/c', [new Foo, 'bar']);  

// Aggiungi rotte multiple associate 
// all’esecuzione di un metodo  
$router->a('/c/d', [new Foo, 'bar']);

// Esegui e valuta la rotta ricevuta  
$router->e();

// Gestione evento della Callback
function callbackFunction() {  
    echo 'Hello A';  
}

// Dichiarazione della classe Foo e del metodo Bar
class Foo {  
    function bar() {  
        echo 'Hello Bar';  
    }  
}  
?>

Dando un’occhiata al codice presente all’interno del file index.php, avrai notato che nelle prime righe viene riportato di sana pianta il codice del router stesso. Dopo averlo istanziato con la seguente riga di codice: $router = new R(); vengono aggiunte tutte le rotte che di volta in volta si rendono necessarie.

A titolo di prova ne sono state aggiunte alcune, ad esempio, con questo codice:

// Aggiungi una rotta con una closure  
$router->a('/b', function() {  
    echo 'Hello B';  
});

Viene aggiunta la rotta “/b” e di conseguenza digitando nella barra degli indirizzi del browser questo URL: http://localhost/index.php/b, verrà stampata a video la stringa “Hello B”. In pratica viene invocata l’azione corrispondente alla rotta associata.

Con quest’altro codice, possiamo aggiungere la rotta di default per raggiungere la homepage nel caso in cui non venisse richiamata nessuna delle rotte previste. Quindi, in questo esempio, digitando nella barra degli indirizzi del browser questo URL: http://localhost/index.php/, verrà stampata a video la stringa “Hello World”.

// Aggiungi la rotta alla homepage  
$router->a('/', function() {  
    echo 'Hello World';  
});

Analizzando più a fondo il codice presente nel file index.php, puoi notare come, individuata una determinata rotta è possibile associarle il metodo di una classe o addirittura una funzione di callback. Vedi il codice seguente:

// Aggiungi una rotta con una callback function  
$router->a('/a', 'callbackFunction');

// Evento di gestione della Callback
function callbackFunction() {  
    echo 'Hello A';  
}

LEGGI ANCHE: Come creare un programma con Prettier in Visual Studio Code

Come creare un programma seguendo uno stile coerente? Questo di per sé, è già una sfida. L’estensione Prettier per VSCode ti viene in aiuto.

4. La definizione di rotte multiple

Nel paragrafo precedente abbiamo visto come associare l’esecuzione di metodi o codice PHP a determinati URL. Con questo codice è possibile associare a più rotte uno stesso codice PHP da invocare:

// Aggiungi rotte multiple associate 
// all’esecuzione del metodo ‘bar’ della classe ‘Foo’
$router->a('/c/d', [new Foo, 'bar']);

Infatti, digitando uno di questi due URL: http://localhost/index.php/c, http://localhost/index.php/d, è possibile invocare il metodo “bar” della classe “Foo”. Cioè, è stato associato a diverse rotte l’esecuzione dello stesso codice, e quindi, la stessa azione.

5. I vantaggi del routing

Mi preme ricordare che, un sistema di routing di questo genere deve essere considerato come una base di partenza per lo studio e l’approfondimento di un sistema di routing comunque da perfezionare.

A tal proposito, proprio l’autore di questo router, cioè Muhammad Usman, ne sconsiglia l’uso diretto in applicazioni reali.

Ad ogni modo, si evince che, anche un sistema di routing come questo porta dei vantaggi enormi in termini di gestione e stesura del codice. Avere una tabella di routing gestibile a proprio piacimento apporta considerevoli benefici in fase di sviluppo di qualsiasi Web Application.

In questo video tutorial è possibile seguire passo-passo l’implementazione di un sistema di ruoting alternativo utile ai fini dello sviluppo web.


LEGGI ANCHE: Come sviluppare web app CodeLess con WordPress, PHP e MySQL

Quante volte ti sei trovato nella condizione di sviluppare web app e non sapere da dove iniziare? Con un framework CodeLess ora si può.
Seguimi su

Antonio Lamorgese

Amministratore di rete e programmatore. Dopo anni di esperienza nel settore, ho ideato un generatore di codice PHP Scopri di più su https://www.phpcodewizard.it.

x