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.