Enrutador (Url's amigables)

Las rutas son la solución para las URL's Amigables que ofrece Ocrend Framework, es importante saber que éstas no se manejan en el sistema como variables $_GET de modo que el acceso y control a ellas debe realizarse mediante un enrutador que implemente la interfaz Ocrend/Kernel/Router/IRouter

Flujo de datos desde el router y un controlador

La clase Router

Es una clase que implementa la interfaz Ocrend/Kernel/Router/IRouter, se encarga de leer la información de la URL y es la responsable de elegir los controladores a ejecutar.

Método / Atributo Función
const RULES Arreglo que tiene definidas las reglas.
  • none Ninguna regla
  • letters Sólamente letras
  • alphanumeric Sólamente letras y números
  • url Sólamente letras, números y el caracter "-"
  • integer Sólamente números enteros
  • integer_positive Solamente números enteros positivos
  • float Sólamente números flotantes
  • float_positive Sólamente números flotantes positivos
public __construct() Constructor de la clase.
public setRoute() Crea una nueva ruta, el orden de creación de una ruta afectará la forma en la que se obtiene desde la URL. Por ejemplo si creamos la ruta /ejemplo, y después la ruta /ejemplo_2 para poder obtener la segunda ruta, la URL debe tener la forma controlador/metodo/id/ruta 1/aqui la segunda ruta
string $index nombre identificador que se le define a la ruta.
string $rule = 'none' regla a ocupar para filtrar el valor de la ruta, los valores son aquellos existentes en const RULES
public getRoute(): mixed Obtiene el valor de una ruta según la regla que ha sido definida y si ésta existe. Si el contenido de la ruta no corresponde con la regla, devolverá null.
string $index nombre identificador que se le define a la ruta.
public getController(): string Obtiene el controlador que se solicita por la URL.
public getMethod(): string|null Obtiene el método que se solicita por la URL.
public getId(): string|int|null Obtiene el id que se solicita por la URL.
bool $with_rules = false al establecerse en true, aplica la regla para que el contenido sea sólamente numérico mayor a cero.
public executeController() Identifica el controlador que debe ejecutarse.

Definir reglas nuevas

Siempre podemos definir nuevas reglas a cualquier ruta, éstas reglas se definen una sóla vez y pueden ser utilizadas en cualquier ruta de cualquier controlador en toda la aplicación.

Para ello debemos abrir el archivo ./Code/Kernel/Router/Router.php y localizar la constante RULES donde debemos añadir dentro del arreglo:

'nombre_de_mi_regla' # Un comentario descriptivo de qué hace

Luego se debe crear un nuevo método en la clase ./Code/Kernel/Router/Rules.php con el nombre de la regla.

			
/**
    * Descripción de lo que realiza la regla
    *
    * @param mixed $ruta : Ruta a aplicar la regla
    *
    * @return mixed
*/
final public function nombre_de_mi_regla($ruta) {
    if(condición que debe cumpliar el contenido guardado en $ruta) {
		return $ruta;
	}

	return null;
}
					

La interfaz IRouter

Si se desea reemplazar el router por uno nuevo, debe implementarse la siguiente interfaz para garantizar su correcta integración dentro del framework.

Método Necesario
public setRoute(string $index, string $rule)
public getRoute(string $index)
public getController()
public getMethod()
public getId(bool $with_rules)
public executeController()