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 1: | Línea 1: | ||
− | + | '''ApplicationController''' | |
Es la clase principal utilizada para crear controladores, que son la primera parte del | Es la clase principal utilizada para crear controladores, que son la primera parte del | ||
modelo MVC. Contiene métodos importantes para facilitar la interacción entre éstos, los | modelo MVC. Contiene métodos importantes para facilitar la interacción entre éstos, los | ||
modelos y la presentación. | modelos y la presentación. | ||
− | |||
Características: | Características: | ||
− | + | • Los valores de los atributos de las sub-clases son persistentes, es decir que no se | |
− | |||
pierden cuando termina la ejecución de un script. | pierden cuando termina la ejecución de un script. | ||
+ | • Automatiza la interacción entre la lógica y la presentación | ||
+ | • Es sencilla de usar | ||
− | + | '''Métodos de la Clase ApplicationController''' | |
− | |||
− | |||
− | |||
− | |||
La clase posee una serie de métodos que son útiles para el trabajo con controladores. | La clase posee una serie de métodos que son útiles para el trabajo con controladores. | ||
− | + | '''Render($view)''' | |
− | Visualiza una vista que pertenece al mismo controlador. | + | Visualiza una vista que pertenece al mismo controlador. Ejemplo: |
− | + | <source lang=php line> | |
− | Ejemplo: | + | 1. <?php |
− | <source lang=php> | + | 2. |
− | <?php | + | 3. class ProductosController extends ApplicationController { |
− | + | 4. | |
− | class ProductosController extends ApplicationController { | + | 5. function index(){ |
− | + | 6. $this> | |
− | + | render('consultar'); | |
− | + | 7. } | |
− | + | 8. | |
− | + | 9. } //fin de la clase | |
− | } //fin de la clase | + | 10. |
− | + | 11.?> | |
− | ?> | ||
</source> | </source> | ||
En este caso se visualizaría la vista views/productos/consultar.phtml | En este caso se visualizaría la vista views/productos/consultar.phtml | ||
− | + | '''Redirect($url, $seconds=0.5)''' | |
Redirecciona la ejecución a otro controlador en un tiempo de ejecución determinado | Redirecciona la ejecución a otro controlador en un tiempo de ejecución determinado | ||
− | <source lang=php> | + | <source lang=php line> |
− | <?php | + | 1. <?php |
− | + | 2. | |
− | class ProductosController extends ApplicationController { | + | 3. class ProductosController extends ApplicationController { |
− | + | 4. | |
− | + | 5. function index(){ | |
− | + | 6. $this> | |
− | + | redirect('facturas/nueva', 2); | |
− | + | 7. } | |
− | } | + | 8. |
− | + | 9. } | |
− | ?> | + | 10. |
+ | 11.?> | ||
</source> | </source> | ||
En el ejemplo va a facturas/nueva después de 2 segundos | En el ejemplo va a facturas/nueva después de 2 segundos | ||
− | + | '''Post($value)''' | |
Obtiene acceso orientado a objetos a los valores de $_POST, $value es el índice para | Obtiene acceso orientado a objetos a los valores de $_POST, $value es el índice para | ||
pasar al array asociativo. | pasar al array asociativo. | ||
− | + | '''Get($value)''' | |
Obtiene acceso orientado a objetos a los valores de $_GET, $value es el índice para | Obtiene acceso orientado a objetos a los valores de $_GET, $value es el índice para | ||
pasar al array asociativo. | pasar al array asociativo. | ||
− | + | '''Request($value)''' | |
Obtiene acceso orientado a objetos a los valores de $_REQUEST, $value es el índice para | Obtiene acceso orientado a objetos a los valores de $_REQUEST, $value es el índice para | ||
pasar al array asociativo. | pasar al array asociativo. | ||
− | + | '''Render_partial($name)''' | |
Visualiza una vista parcial (partial) que pertenece al mismo controlador. Ejemplo: | Visualiza una vista parcial (partial) que pertenece al mismo controlador. Ejemplo: | ||
− | <source lang=php> | + | <source lang=php line> |
− | <?php | + | 1. <?php |
− | + | 2. | |
− | + | 3. class ProductosController extends ApplicationController { | |
− | + | 4. | |
− | + | 5. function index(){ | |
− | + | 6. $this> | |
− | + | render_partial('mostrar_menu'); | |
− | + | 7. }//fin del metodo | |
− | }//fin de la clase | + | 8. |
− | + | 9. }//fin de la clase | |
− | ?> | + | 10. |
+ | 11.?> | ||
</source> | </source> | ||
En este caso se visualizaría la vista parcial views/productos/_mostrar_menu.phtml | En este caso se visualizaría la vista parcial views/productos/_mostrar_menu.phtml | ||
− | + | '''Route_to([params: valor])''' | |
− | Hace el enrutamiento desde un controlador a otro, o desde una acción a otra. | + | Hace el enrutamiento desde un controlador a otro, o desde una acción a otra. Recibe los |
− | + | parámetros con nombre: | |
− | Recibe los parámetros con nombre: | + | • controller: A qué controlador se va a redireccionar |
− | + | • action: A que acción se va a redireccionar | |
− | • | + | • id: Id de la redirección |
− | |||
− | • | ||
− | |||
− | • | ||
− | |||
Ejemplo: | Ejemplo: | ||
− | <source lang=php> | + | <source lang=php line> |
− | return $this | + | 1. return $this> |
+ | route_to("controller: clientes", "action: consultar", "id:1"); | ||
</source> | </source> | ||
El tipo de enrutamiento que realiza es interno, es decir que lo usuarios no notan cuando | El tipo de enrutamiento que realiza es interno, es decir que lo usuarios no notan cuando | ||
están siendo redireccionados en la aplicación. | están siendo redireccionados en la aplicación. | ||
− | + | ||
− | + | '''Redirect($url_controlador)''' | |
− | + | Realiza un redireccionamiento a otro controlador/accion mediante HTTP. Es útil cuando | |
− | + | queremos hacer una real redirección que incluso cambie la URL que aparece en el | |
− | |||
− | |||
− | |||
− | |||
− | Realiza un redireccionamiento a otro controlador/accion mediante HTTP. | ||
− | |||
− | Es útil cuando queremos hacer una real redirección que incluso cambie la URL que aparece en el | ||
explorador. | explorador. | ||
− | |||
Ejemplo: | Ejemplo: | ||
− | <source lang=php> | + | <source lang=php line> |
− | $this | + | 1. $this> |
+ | redirect(“/productos/query”); | ||
</source> | </source> | ||
− | + | '''Cache_layout($minutes)''' | |
Caché de la vista views/layout/ correspondiente al controlador durante $minutes | Caché de la vista views/layout/ correspondiente al controlador durante $minutes | ||
− | + | '''Not_found($controller, $action)''' | |
Puedes definir el método not_found en cualquier controlador, en caso de estar definido se | Puedes definir el método not_found en cualquier controlador, en caso de estar definido se | ||
llamará cuando no encuentre definida alguna acción así es más fácil controlar este tipo | llamará cuando no encuentre definida alguna acción así es más fácil controlar este tipo | ||
de errores: | de errores: | ||
− | <source lang=php> | + | <source lang=php line> |
− | <?php | + | 1. <?php |
− | + | 2. class PruebaController extends ApplicationController { | |
− | class PruebaController extends ApplicationController { | + | 3. |
− | + | 4. function index(){ | |
− | + | 5. $this> | |
− | + | render_text("Este es el index"); | |
− | + | 6. } | |
− | + | 7. | |
− | + | 8. function not_found($controller, $action){ | |
− | + | 9. Flash::error("No esta definida la accion $action, redireccionando | |
− | + | a index..."); | |
− | + | 10. return $this> | |
− | } | + | route_to('action: index'); |
− | ?> | + | 11. } |
+ | 12. } | ||
+ | 13.?> | ||
</source> | </source> | ||
Línea 150: | Línea 138: | ||
desarrollo | desarrollo | ||
− | + | '''Set_response($type)''' | |
− | Especifica el tipo de respuesta que va a generar el controlador. | + | Especifica el tipo de respuesta que va a generar el controlador. Cuando es el valor de |
− | + | $type es view solamente envía la salida de la vista más no del layout, el template o | |
− | Cuando es el valor de $type es view solamente envía la salida de la vista más no del layout, el template o cualquier cabecera html. | + | cualquier cabecera html. Es ideal en salidas AJAX o PDF. Otro valor para $type es XML. |
− | + | <source lang=php line> | |
− | Es ideal en salidas AJAX o PDF. Otro valor para $type es XML. | + | 1. <?php |
− | <source lang=php> | + | 2. class PruebaController extends ApplicationController { |
− | <?php | + | 3. |
− | + | 4. function accion_ajax(){ | |
− | class PruebaController extends ApplicationController { | + | 5. $this> |
− | + | set_response(“view”); | |
− | + | 6. } | |
− | + | 7. } | |
− | |||
− | } | ||
</source> | </source> | ||
− | + | '''Is_alnum($valor)''' | |
− | Evalúa si un campo es alfanumérico o no. | + | Evalúa si un campo es alfanumérico o no. Es útil para validar la entrada de datos al |
− | + | recibirlos por parte de usuarios. | |
− | Es útil para validar la entrada de datos al recibirlos por parte de usuarios. | + | <source lang=php line> |
− | <source lang=php> | + | 1. <?php |
− | <?php | + | 2. class PruebaController extends ApplicationController { |
− | + | 3. | |
− | class PruebaController extends ApplicationController { | + | 4. function adicionar(){ |
− | + | 5. $nombre = $this> | |
− | + | request(“nombre”); | |
− | + | 6. if($this> | |
− | + | is_alnum($nombre)==false){ | |
− | + | 7. Flash::error(“Entrada invalidad para precio”); | |
− | + | 8. return; | |
− | + | 9. } | |
− | + | 10. /* ..*/ | |
− | + | 11. } | |
− | } | + | 12. } |
− | ?> | + | 13.?> |
</source> | </source> | ||
− | + | '''Load_record($record)''' | |
− | |||
Carga los campos de un registro ActiveRecord como atributos del controlador, recibe | Carga los campos de un registro ActiveRecord como atributos del controlador, recibe | ||
como parámetro $record ActiveRecord o string registro ActiveRecord a cargar, si es un | como parámetro $record ActiveRecord o string registro ActiveRecord a cargar, si es un | ||
− | '''string:''' este debe corresponder al nombre de un modelo Soporta argumento variable. | + | '''string: '''este debe corresponder al nombre de un modelo Soporta argumento variable. |
'''field:''' campos a cargar separados por coma | '''field:''' campos a cargar separados por coma | ||
Línea 202: | Línea 187: | ||
'''preffix:''' prefijo para el atributo en el controlador | '''preffix:''' prefijo para el atributo en el controlador | ||
− | <source lang=php> | + | <source lang=php line> |
//Ejemplo1: | //Ejemplo1: | ||
− | $usuario = $this | + | $usuario = $this> |
− | $this | + | Usuario> |
+ | find(1); | ||
+ | $this> | ||
+ | load_record($usuario); | ||
+ | //Ejemplo2: | ||
+ | $usuario = $this> | ||
+ | Usuario> | ||
+ | find(1); | ||
+ | $this> | ||
+ | load_record($usuario, 'except: id, sexo'); | ||
+ | //Ejemplo3: | ||
+ | $usuario = $this> | ||
+ | Usuario> | ||
+ | find(1); | ||
+ | $this> | ||
+ | load_record($usuario, 'field: nombre, apellido'); | ||
+ | //Ejemplo4: | ||
+ | $usuario = $this> | ||
+ | Usuario> | ||
+ | find(1); | ||
+ | $this> | ||
+ | load_record($usuario, 'preffix: c_'); | ||
+ | //Ejemplo5: | ||
+ | $this> | ||
+ | load_record('Usuario'); | ||
+ | //Ejemplo6: | ||
+ | $this> | ||
+ | load_record('Usuario', 'field: nombre, apellido'); | ||
+ | </source> | ||
+ | |||
+ | '''is_numeric($valor)''' | ||
+ | Evalúa si un campo es numérico o no. Es útil para validar la entrada de datos al recibirlos | ||
+ | por parte de usuarios. | ||
+ | <source lang=php line> | ||
+ | 1. <?php | ||
+ | 2. class PruebaController extends ApplicationController { | ||
+ | 3. | ||
+ | 4. function adicionar(){ | ||
+ | 5. $precio = $this> | ||
+ | request(“precio”); | ||
+ | 6. if($this> | ||
+ | is_numeric($precio)==false){ | ||
+ | 7. Flash::error(“Entrada invalida para precio”); | ||
+ | 8. return; | ||
+ | 9. } | ||
+ | 10. /* ..*/ | ||
+ | 11. } | ||
+ | 12. } | ||
+ | 13.?> | ||
+ | </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: '''kumbia.org''' | |
− | + | 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 line> | |
− | + | 1. <?php | |
+ | 2. | ||
+ | 3. class ProductosController extends ApplicactionController { | ||
+ | 4. | ||
+ | 5. public function buscar($id){ | ||
+ | 6. /* */ | ||
+ | 7. } | ||
+ | 8. } | ||
+ | 9. | ||
+ | 10.?> | ||
+ | </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 |
− | $this | + | internamente. |
+ | Otras formas de hacer esto es utilizar los métodos post, get o request así: | ||
+ | <source lang=php line> | ||
+ | 1. public function buscar(){ | ||
+ | 2. $id = $this> | ||
+ | request(“id”); | ||
+ | 3. // o también | ||
+ | 4. $id = $this> | ||
+ | id; | ||
+ | 5. } | ||
+ | </lang> | ||
− | + | ¿Cómo saber el nombre del controlador actual? | |
− | $this | + | <source lang=php line> |
+ | 1. public function buscar(){ | ||
+ | 2. $controlador = $this> | ||
+ | controller_name; | ||
+ | 3. } | ||
+ | </source> | ||
− | + | ¿Cómo saber el nombre de la acción actual? | |
− | $this | + | <source lang=php line> |
+ | 1. public function buscar(){ | ||
+ | 2. $controlador = $this> | ||
+ | action_name; | ||
+ | 3. } | ||
</source> | </source> | ||
− | + | Ahora veamos el siguiente ejemplo: | |
− | + | '''http://www.kumbia.org/aplicacion/registro/buscar_fecha/2006/12/01''' | |
+ | El sitio es: '''kumbia.org''' | ||
+ | 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> | + | <source lang=php line> |
− | <?php | + | 1. <?php |
+ | 2. | ||
+ | 3. class RegistroController extends ApplicactionController { | ||
+ | 4. | ||
+ | 5. public function buscar_fecha($año, $mes, $dia){ | ||
+ | 6. /* */ | ||
+ | 7. } | ||
+ | 8. } | ||
+ | 9. | ||
+ | 10.?> | ||
+ | </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 line> |
− | + | 1. <?php | |
+ | 2. | ||
+ | 3. class RegistroController extends ApplicactionController { | ||
+ | 4. | ||
+ | 5. public function buscar_fecha(){ | ||
+ | 6. $año = $this> | ||
+ | parameters[0]; | ||
+ | 7. $mes = $this> | ||
+ | parameters[1]; | ||
+ | 8. $dia = $this> | ||
+ | parameters[2]; | ||
+ | 9. /* ... */ | ||
+ | 10. } | ||
+ | 11. } | ||
</source> | </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 line> | ||
+ | 1. Array | ||
+ | 2. ( | ||
+ | 3. [0] => registro | ||
+ | 4. [1] => buscar_fecha | ||
+ | 5. [2] => 2006 | ||
+ | 6. [3] => 12 | ||
+ | 7. [4] => 01 | ||
+ | 8. ) | ||
+ | </source> |