Enrutamiento y redirecciones

De KumbiaPHP Framework Wiki

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");