Edición de «Application controller»
De KumbiaPHP Framework Wiki
Advertencia: no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si inicias sesión o creas una cuenta, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces guarda los cambios para así efectuar la reversión.
Revisión actual | Tu texto | ||
Línea 247: | Línea 247: | ||
</source> | </source> | ||
− | [[ | + | ='''Obtener valores desde una de Kumbia'''= |
+ | |||
+ | Las URLs de Kumbia están caracterizadas por tener varias partes cada una de ellas con una función conocida. | ||
+ | |||
+ | Para obtener desde un controlador los valores que vienen en la URL podemos usar algunas propiedades útiles en el controlador: | ||
+ | |||
+ | Ejemplo1: | ||
+ | |||
+ | '''http://www.kumbiaphp.com/aplicacion/productos/buscar/12''' | ||
+ | |||
+ | El sitio es: '''kumbiaphp.com''' | ||
+ | |||
+ | La aplicación es: '''aplicacion''' | ||
+ | |||
+ | El controlador es: '''productos''' | ||
+ | |||
+ | La acción es: '''buscar''' | ||
+ | |||
+ | El valor para id es: '''12''' | ||
+ | |||
+ | Nuestro controlador '''aplicación/productos_controller.php''' luce así: | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | |||
+ | class ProductosController extends ApplicactionController { | ||
+ | |||
+ | public function buscar($id){ | ||
+ | /* */ | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ?> | ||
+ | </source> | ||
+ | |||
+ | Dentro del método buscar podemos obtener el valor de id osea 12 en nuestro ejemplo | ||
+ | colocando un parámetro al controlador '''$id''' podemos recoger este valor y utilizarlo | ||
+ | internamente. | ||
+ | |||
+ | Otras formas de hacer esto es utilizar los métodos '''post, get o request''' así: | ||
+ | <source lang=php> | ||
+ | public function buscar(){ | ||
+ | $id = $this->request(“id”); | ||
+ | // o también | ||
+ | $id = $this->id; | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | =='''¿Cómo saber el nombre del controlador actual?'''== | ||
+ | <source lang=php> | ||
+ | public function buscar(){ | ||
+ | $controlador = $this->controller_name; | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | =='''¿Cómo saber el nombre de la acción actual?'''== | ||
+ | <source lang=php> | ||
+ | public function buscar(){ | ||
+ | $accion = $this->action_name; | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | Ahora veamos el siguiente ejemplo: | ||
+ | |||
+ | '''http://www.kumbiaphp.com/aplicacion/registro/buscar_fecha/2006/12/01''' | ||
+ | |||
+ | El sitio es: '''kumbiaphp.com''' | ||
+ | |||
+ | La aplicación es: '''aplicacion''' | ||
+ | |||
+ | El controlador es: '''registro''' | ||
+ | |||
+ | La acción es: '''buscar_fecha''' | ||
+ | |||
+ | La mejor forma de recoger estos valores es de la siguiente forma: | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | |||
+ | class RegistroController extends ApplicactionController { | ||
+ | |||
+ | public function buscar_fecha($año, $mes, $dia){ | ||
+ | /* */ | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ?> | ||
+ | </source> | ||
+ | |||
+ | Como vemos los valores adicionales en la URL son automáticamente agregados como | ||
+ | parámetros en la acción del controlador. | ||
+ | |||
+ | =='''¿Que pasa con id en este ejemplo?'''== | ||
+ | '''$id''' es el valor del primer parámetro siempre así que si nos referimos a éste, | ||
+ | encontramos que tiene el valor 2006. | ||
+ | |||
+ | =='''¿Cómo puedo obtener los parámetros extra si no sé cuántos son?'''== | ||
+ | Aquí usamos la propiedad del controlador '''$parameters''' que contiene estos valores así | ||
+ | que el ejemplo podríamos reescribirlo así: | ||
+ | |||
+ | <source lang=php> | ||
+ | <?php | ||
+ | |||
+ | class RegistroController extends ApplicactionController { | ||
+ | |||
+ | public function buscar_fecha(){ | ||
+ | $año = $this->parameters[0]; | ||
+ | $mes = $this->parameters[1]; | ||
+ | $dia = $this->parameters[2]; | ||
+ | /* ... */ | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | Por último podemos ver todos los parámetros que vienen en una url de Kumbia usando la | ||
+ | propiedad del controlador '''$this->all_parameters'''. Una salida de esta variable en el | ||
+ | ejemplo anterior con print_r muestra: | ||
+ | <source lang=php> | ||
+ | Array | ||
+ | ( | ||
+ | [0] => registro | ||
+ | [1] => buscar_fecha | ||
+ | [2] => 2006 | ||
+ | [3] => 12 | ||
+ | [4] => 01 | ||
+ | ) | ||
+ | </source> | ||
+ | |||
+ | ='''ApplicationControllerBase'''= | ||
+ | |||
+ | Es una clase definida en el archivo controllers/application.php, de esta forma: | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | |||
+ | class ControllerBase { | ||
+ | |||
+ | }//fin de la clase | ||
+ | ?> | ||
+ | </source> | ||
+ | |||
+ | La clase tiene como objetivo permitir que se compartan ciertos métodos y atributos que | ||
+ | deben estar disponibles para todos los controladores de la aplicación. | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | |||
+ | class ControllerBase { | ||
+ | |||
+ | protected function seguridad(){ | ||
+ | /* ... */ | ||
+ | } | ||
+ | |||
+ | }//fin de la clase | ||
+ | |||
+ | ?> | ||
+ | </source> | ||
+ | |||
+ | y por ejemplo en el controlador productos podríamos usar este método así: | ||
+ | |||
+ | <source lang=php> | ||
+ | <?php | ||
+ | |||
+ | class Productos extends ApplicationController { | ||
+ | |||
+ | public function adicionar(){ | ||
+ | |||
+ | if($this->seguridad()){ | ||
+ | /* .... */ | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | }//fin de la clase | ||
+ | |||
+ | ?> | ||
+ | </source> | ||
+ | |||
+ | El método seguridad ahora se encuentra disponible para cualquier controlador. | ||
+ | |||
+ | ='''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í: | ||
+ | <source lang=ini> | ||
+ | ; 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/* | ||
+ | </source> | ||
+ | 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 | ||
+ | <source lang=php> | ||
+ | return $this->route_to("controller: clientes", "action: consultar", "id:1"); | ||
+ | </source> | ||
+ | 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 | ||
+ | <source lang=php> | ||
+ | return Router::route_to("controller: clientes", "action: consultar", "id:1"); | ||
+ | </source> |