Router

Vincula una URL con un recurso del sitio web. En este sentido, se encarga de generar una URL capaz de representar un recurso del servidor, y de entregar dicho recurso cuando un usuario apunta a su URL.

El recurso puede ser un archivo HTML o cualquier otro tipo de archivo que sea generado de forma dinámica, es decir, utilizando PHP.

La librería permite funciones avanzadas, como las URL amigables y el reemplazo del nombre del componente y de la tarea.

 

Convenciones para acceder a un recurso

La vinculación entre url y el recurso se realizará de modo automático siguiendo algunas convenciones. Internamente, los valores que serán considerados son:

  • access_point: punto de acceso.
  • component: apunta a un componente de la aplicación.
  • task: la tarea que debe ejecutar dicho componente.
  • format: el formato de salida, puede ser una plantilla HTML, un texto, un json, un modal, etc.

 

Punto de acceso

Una aplicación puede tener distintos puntos de acceso, cada uno de ellos tendrá sus propios propósitos. Algunos de los puntos de acceso más comunes son:

Valor Descripción
front muestra datos, de acceso público.
admin administra los datos. De acceso único para administradores.
my administra los datos. De acceso único para usuarios registrados y con permisos.
audit administra los datos. De acceso único para usuarios administradores y con permisos.
api interfaz de programación de aplicaciones.
console interfaz de consola.

Si no se declara el punto de acceso, el framework utilizará por defecto el valor: front.

Componente

Un componente es un punto de acceso en donde la extensión permite ejecutar distintos tipos de tareas. En este aspecto, y para los fines prácticos, un punto de acceso más un componente hacen referencia a un controlador.

El componente por defecto tiene el nombre de la extensión a la que deseamos acceder. Para acceder a otro componente dentro de la extensión, debemos agregar un punto y el nombre del subcomponente al que deseamos acceder.

$component = "{{extension}}.{{subcomponent}}";

Los componentes por defecto serán: console para el acceso por consola, un valor configurable para el acceso a través del frente (front) y para el resto de los puntos de acceso será home.

Tarea

La tarea a ejecutar dentro de un controlador. En caso de no indicar un valor, el framework utilizará el valor: index.

Formato

Este valor debe ser pasado como argumento. En el framawork ha perdido importancia con el tiempo. Actualmente, se utiliza para dar respuestas correctas en caso de tener errores antes de cargar la vista. Algunas aplicaciones lo utilizan para decidir el tipo de respuesta que devolverá.

 

Registrar Urls de modo explicito

Es posible registrar Urls que no siguen las convenciones del framework. Para ello, en la aplicación debe crearse un archivo:

app/{{extension}}/routes/{{Accesspoint}}Routes.php

y en él se podrá realizar todos los registros de Urls que se desee. Las funciones para registrar Uri son: Router::route y Router::routeWith.

Las uri pueden incluir parámetros:

Router::route('articles/{id:int}', 'show');

Note que se agregó un parámetro de nombre id, y que además es del tipo integer. Actualmente, los tipos soportados son:

  • int un entero
  • id un entero positivo
  • string cualquier cadena, hasta una barra /.
  • * el resto de la cadena, incluida las barras /.

Si el parámetro es opcional, se le agrega el modificador de pregunta ?.

Router::route('articles/day/{date?}', 'day');

Los parámetros asociativos se indican del siguiete modo:

Router::route('articles/page=/{page_number?}', 'list');

 

Sistema de identificación de las Uri

Las funciones de registros de Uri permiten agregar identificadores como tercer parámetro.

Router::route('articles/{id:int}', 'show', '#show');

Luego, este identificador puede ser utilizado en la función que crea una Url.

url('#show', ['id' => 1]);

Esto será válido dentro del componente de la aplicación. Sin embargo, si queremos utilizar el identificador para crear una Url fuera del ámbito de ésta, es necesario anteponer el identificador del componente, compuesto por #{accesspoint}.{component}.

url('#front.articles#show', ['id' => 1]);