Con los frameworks PHP, ¿por qué se utiliza el concepto de "ruta"?

31

La razón por la que pregunto esto es porque ¿no es un script PHP una ruta? Por ejemplo, si tiene un article.php, entonces su ruta es simplemente http://mysite.com/article.php .

¿Por qué abstraer aún más el concepto de una ruta cuando ya existe como un archivo simple?

Ryan
fuente

Respuestas:

44

Para comprender lo que hace un enrutador, primero debe comprender qué es un motor de reescritura. Del artículo de Wikipedia (énfasis mío):

Un motor de reescritura es un software que modifica la apariencia de una URL web (reescritura de URL). Las URL reescritas (a veces conocidas como URL cortas, elegantes o amigables con los motores de búsqueda - SEF) se utilizan para proporcionar enlaces más cortos y de aspecto más relevante a las páginas web. La técnica agrega un grado de separación entre los archivos utilizados para generar una página web y la URL que se presenta al mundo .

Cuando se usa un motor de reescritura, no tiene una correlación 1: 1 entre la URL y un script PHP. Un ejemplo del mismo artículo:

http://example.com/wiki/index.php?title=Page_title

puede reescribirse como:

http://example.com/wiki/Page_title

Hay varios beneficios al usar la técnica. Como PHP generalmente está estrechamente acoplado con Apache, el motor de reescritura más utilizado es el mod_rewrite de Apache .

Si desea reescribir las URL, necesita algún tipo de enrutamiento, ya que el enrutamiento es el proceso de tomar la URL, dividirla en componentes y decidir cuál es la secuencia de comandos real a llamar. La página de documentación para el enrutador estándar de Zend Framework explica el proceso como:

El enrutamiento es el proceso de tomar un punto final URI (esa parte del URI que viene después de la URL base) y descomponerlo en parámetros para determinar qué módulo, controlador y acción de ese controlador debe recibir la solicitud.

La mayoría de los frameworks PHP de hoy en día se basan en el patrón MVC , y en un framework MVC el proceso es algo como esto * :

  1. El navegador apunta a una URL,
  2. El servidor web captura la solicitud y la reenvía a un punto de entrada común, generalmente un index.phpscript,
  3. index.php obtiene la URL e inicia el proceso de enrutamiento.
  4. La URL se descompone en parámetros, donde el primero es el controlador, el segundo es el método de acción y el resto se consideran parámetros dinámicos,
  5. Si existe una clase de controlador que coincide con el primer parámetro, se crea una instancia de un objeto de controlador,
  6. Se llama al método de acción, que generalmente es una función del objeto controlador, y su retorno es el que realmente regresó al navegador.

Los parámetros de coincidencia con controladores y métodos generalmente emplean la coincidencia mediante expresiones regulares para poder manejar patrones de enrutamiento complejos y dinámicos, conocidos como rutas. Se pueden encontrar buenos ejemplos de rutas en la página de documentación de Enrutamiento URI de CodeIgniter :

$ route ['journals'] = "blogs";

$ route ['blog / joe'] = "blogs / usuarios / 34";

$ route ['product / (: any)'] = "catalog / product_lookup";

$ route ['product / (: num)'] = "catalog / product_lookup_by_id / $ 1";

La $routematriz contiene los patrones como claves y las acciones resultantes como valores en controller/action_method/dynamic_parameterformato.

* Esto no pretende ser una descripción del proceso canónico, solo una explicación simplificada.

Yannis
fuente
15
Debería haber una insignia para describir un enrutador mvc sin utilizar ningún derivado de "despacho" ...
yannis