Con i framework PHP, perché viene utilizzato il concetto di "route"?


31

Il motivo per cui lo chiedo è perché uno script PHP non è una route? Ad esempio, se hai un articolo.php allora il tuo percorso è semplicemente http://mysite.com/article.php .

Perché allontanare ulteriormente il concetto di una rotta quando esiste già come un semplice file?

Risposte:


44

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 * :

  1. Il browser è puntato su un URL,
  2. Il server Web rileva la richiesta e la inoltra a un punto di ingresso comune, in genere uno index.phpscript,
  3. index.php ottiene l'URL e avvia il processo di routing.
  4. L'URL è scomposto in parametri, dove il primo è il controller, il secondo è il metodo di azione e il resto sono considerati parametri dinamici,
  5. Se esiste una classe controller corrispondente al primo parametro, viene istanziato un oggetto controller,
  6. 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' $routearray contiene i pattern come chiavi e le azioni risultanti come valori in controller/action_method/dynamic_parameterformato.

* Questo non è inteso come una descrizione del processo canonico, ma solo una spiegazione semplificata.


15
Dovrebbe esserci un badge per descrivere un router mvc senza utilizzare alcun derivato di "dispacciamento" ...
— yannis,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.