Per capire cosa fa un router, devi prima capire cos'è un motore di riscrittura. Dalla articolo di Wikipedia (sottolineatura mia):
Un motore di riscrittura è un software che modifica l'aspetto di un URL Web (riscrittura URL). Gli URL riscritti (a volte noti come URL brevi, elaborati o compatibili con i motori di ricerca - SEF) vengono utilizzati per fornire collegamenti più brevi e più pertinenti alle pagine Web. La tecnica aggiunge un certo grado di separazione tra i file utilizzati per generare una pagina Web e l'URL che viene presentato al mondo .
Quando viene utilizzato un motore di riscrittura non si ha una correlazione 1: 1 tra l'URL e uno script PHP. Un esempio dallo stesso articolo:
http://example.com/wiki/index.php?title=Page_title
può essere riscritto come:
http://example.com/wiki/Page_title
Ci sono vari vantaggi nell'uso della tecnica. Poiché PHP è solitamente strettamente associato ad Apache, il motore di riscrittura più comunemente usato è il mod_rewrite di Apache .
Se desideri URL riscritti, hai bisogno di un tipo di routing, poiché il routing è il processo di acquisizione dell'URL, la sua suddivisione in componenti e la decisione su quale sia lo script effettivo da chiamare. La pagina della documentazione per il router standard di Zend Framework spiega il processo come:
Il routing è il processo di acquisizione di un endpoint URI (quella parte dell'URI che segue l'URL di base) e di scomposizione in parametri per determinare quale modulo, controller e azione di quel controller dovrebbero ricevere la richiesta.
La maggior parte dei framework PHP al giorno d'oggi si basano sul modello MVC e su un framework MVC il processo procede in questo modo * :
- Il browser è puntato su un URL,
- Il server Web rileva la richiesta e la inoltra a un punto di ingresso comune, in genere uno
index.php
script,
index.php
ottiene l'URL e avvia il processo di routing.
- L'URL è scomposto in parametri, dove il primo è il controller, il secondo è il metodo di azione e il resto sono considerati parametri dinamici,
- Se esiste una classe controller corrispondente al primo parametro, viene istanziato un oggetto controller,
- Viene chiamato il metodo di azione che di solito è una funzione dell'oggetto controller e il suo ritorno è ciò che è effettivamente restituito al browser.
La corrispondenza dei parametri con controller e metodi di solito impiega la corrispondenza tramite espressioni regolari per essere in grado di gestire schemi di routing complessi e dinamici, noti come route. Buoni esempi di route sono disponibili nella pagina della documentazione di routing URI di CodeIgniter :
$ route ['journals'] = "blogs";
$ route ['blog / joe'] = "blog / utenti / 34";
$ route ['product / (: any)'] = "catalog / product_lookup";
$ route ['product / (: num)'] = "catalog / product_lookup_by_id / $ 1";
L' $route
array contiene i pattern come chiavi e le azioni risultanti come valori in controller/action_method/dynamic_parameter
formato.
* Questo non è inteso come una descrizione del processo canonico, ma solo una spiegazione semplificata.