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 * :
- El navegador apunta a una URL,
- El servidor web captura la solicitud y la reenvía a un punto de entrada común, generalmente un
index.php
script,
index.php
obtiene la URL e inicia el proceso de enrutamiento.
- 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,
- Si existe una clase de controlador que coincide con el primer parámetro, se crea una instancia de un objeto de controlador,
- 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 $route
matriz contiene los patrones como claves y las acciones resultantes como valores en controller/action_method/dynamic_parameter
formato.
* Esto no pretende ser una descripción del proceso canónico, solo una explicación simplificada.