Enrutamiento y redirecciones
Sumario
Enrutamiento y Redirecciones
Kumbia proporciona un poderoso sistema de redireccionamiento que permite cambiar el flujo de la ejecución de una aplicación entre los controladores MVC.
Kumbia permite el re-direccionamiento de 2 formas: estático y dinámico.
¿Por qué re-direccionamiento?
Necesitamos cambiar el flujo de la ejecución entre controladores, básicamente
Ejemplos:
- El usuario trata de acceder a una acción que no existe y queremos enviarla a una válida.
- El usuario de la aplicación no tiene privilegios para continuar ejecutando determinada acción y debemos enviarlo a otra
Estático
El direccionamiento estático ocurre en el archivo forms/config/routes.ini en donde le decimos al framework cuándo debe redireccionar de acuerdo a los controladores y/o acciones solicitadas. El archivo config/routes.ini se ve así:
; Usa este archivo para definir el enrutamiento estático entre
; controladores y sus acciones
;
; Un controlador se puede enrutar a otro controlador utilizando '*' como
; comodín así:
; controlador1/accion1/valor_id1 = controlador2/accion2/valor_id2
;
; Ej:
; Enrutar cualquier petición a posts/adicionar a posts/insertar/*
; posts/adicionar/* = posts/insertar/*
;
; Enrutar cualquier petición a cualquier controlador en la acción
; adicionar a posts/adicionar/*
; */adicionar/* = posts/insertar/*
[routes]
prueba/ruta1/* = prueba/ruta2/*
prueba/ruta2/* = prueba/ruta3/*
Cualquier política definida en este archivo tiene menos relevancia sobre un direccionamiento dinámico.
Dinámico
Ocurre cuando en ejecución necesitamos cambiar el flujo normal y pasar a otro controlador o a otra acción.
El principal método para hacer esto es usar el método route_to:
route_to([params: valor])
Recibe los parámetros con nombre:
- controller: A que controlador se va a redireccionar
- action: A que acción se va a redireccionar
- id: Id de la redirección
return $this->route_to("controller: clientes", "action: consultar", "id:1");
No todos los parámetros son obligatorios sólo el que sea necesario.
Aviso: En la 0.5 en adelante es mejor usar Router::route_to
return Router::route_to("controller: clientes", "action: consultar", "id:1");