Diferencia entre revisiones de «Application controller»
Línea 13: | Línea 13: | ||
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)''' | + | =='''Render($view)'''== |
Visualiza una vista que pertenece al mismo controlador. Ejemplo: | Visualiza una vista que pertenece al mismo controlador. Ejemplo: | ||
<source lang=php line> | <source lang=php line> | ||
Línea 31: | Línea 31: | ||
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)''' | + | =='''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 | ||
Línea 51: | Línea 51: | ||
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)''' | + | =='''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)''' | + | =='''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)''' | + | =='''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)''' | + | =='''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 line> | <source lang=php line> | ||
Línea 81: | Línea 81: | ||
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])''' | + | ^=='''Route_to([params: valor])'''== |
Hace el enrutamiento desde un controlador a otro, o desde una acción a otra. Recibe los | Hace el enrutamiento desde un controlador a otro, o desde una acción a otra. Recibe los | ||
parámetros con nombre: | parámetros con nombre: | ||
Línea 96: | Línea 96: | ||
están siendo redireccionados en la aplicación. | están siendo redireccionados en la aplicación. | ||
− | '''Redirect($url_controlador)''' | + | =='''Redirect($url_controlador)'''== |
Realiza un redireccionamiento a otro controlador/accion mediante HTTP. Es útil cuando | 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 | queremos hacer una real redirección que incluso cambie la URL que aparece en el | ||
Línea 106: | Línea 106: | ||
</source> | </source> | ||
− | '''Cache_layout($minutes)''' | + | =='''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)''' | + | =='''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 | ||
Línea 138: | Línea 138: | ||
desarrollo | desarrollo | ||
− | '''Set_response($type)''' | + | =='''Set_response($type)'''== |
Especifica el tipo de respuesta que va a generar el controlador. Cuando es el valor de | 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 | $type es view solamente envía la salida de la vista más no del layout, el template o | ||
Línea 153: | Línea 153: | ||
</source> | </source> | ||
− | '''Is_alnum($valor)''' | + | =='''Is_alnum($valor)'''== |
Evalúa si un campo es alfanumérico o no. Es útil para validar la entrada de datos al | Evalúa si un campo es alfanumérico o no. Es útil para validar la entrada de datos al | ||
recibirlos por parte de usuarios. | recibirlos por parte de usuarios. | ||
Línea 173: | Línea 173: | ||
13.?> | 13.?> | ||
</source> | </source> | ||
− | '''Load_record($record)''' | + | |
+ | =='''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 |
− | '''except:''' campos que no se cargaran separados por coma | + | ==='''except:'''=== campos que no se cargaran separados por coma |
− | '''suffix:''' sufijo para el atributo en el controlador | + | ==='''suffix:'''=== sufijo para el atributo en el controlador |
− | '''preffix:''' prefijo para el atributo en el controlador | + | ==='''preffix:'''=== prefijo para el atributo en el controlador |
<source lang=php line> | <source lang=php line> | ||
Línea 220: | Línea 221: | ||
</source> | </source> | ||
− | '''is_numeric($valor)''' | + | =='''is_numeric($valor)'''== |
Evalúa si un campo es numérico o no. Es útil para validar la entrada de datos al recibirlos | Evalúa si un campo es numérico o no. Es útil para validar la entrada de datos al recibirlos | ||
por parte de usuarios. | por parte de usuarios. | ||
Línea 284: | Línea 285: | ||
</lang> | </lang> | ||
− | '''¿Cómo saber el nombre del controlador actual?''' | + | =='''¿Cómo saber el nombre del controlador actual?'''== |
<source lang=php line> | <source lang=php line> | ||
1. public function buscar(){ | 1. public function buscar(){ | ||
Línea 292: | Línea 293: | ||
</source> | </source> | ||
− | '''¿Cómo saber el nombre de la acción actual?''' | + | =='''¿Cómo saber el nombre de la acción actual?'''== |
<source lang=php line> | <source lang=php line> | ||
1. public function buscar(){ | 1. public function buscar(){ | ||
Línea 324: | Línea 325: | ||
parámetros en la acción del controlador. | parámetros en la acción del controlador. | ||
− | '''¿Que pasa con id en este ejemplo?'''' | + | =='''¿Que pasa con id en este ejemplo?''''== |
''$id '''es el valor del primer parámetro siempre así que si nos referimos a éste, | ''$id '''es el valor del primer parámetro siempre así que si nos referimos a éste, | ||
encontramos que tiene el valor 2006. | encontramos que tiene el valor 2006. | ||
− | '''¿Cómo puedo obtener los parámetros extra si no sé cuántos son?''' | + | =='''¿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í | Aquí usamos la propiedad del controlador '''$parameters''' que contiene estos valores así | ||
que el ejemplo podríamos reescribirlo así: | que el ejemplo podríamos reescribirlo así: | ||
Línea 424: | Línea 425: | ||
Kumbia permite el re-direccionamiento de 2 formas: estático y dinámico. | Kumbia permite el re-direccionamiento de 2 formas: estático y dinámico. | ||
− | '''¿Por qué re-direccionamiento?''' | + | =='''¿Por qué re-direccionamiento?'''== |
• Necesitamos cambiar el flujo de la ejecución entre controladores, básicamente | • Necesitamos cambiar el flujo de la ejecución entre controladores, básicamente | ||
• Ejemplo: El usuario trata de acceder a una acción que no existe y queremos enviarla a una válida. | • Ejemplo: El usuario trata de acceder a una acción que no existe y queremos enviarla a una válida. | ||
• Ejemplo: El usuario de la aplicación no tiene privilegios para continuar ejecutando determinada acción y debemos enviarlo a otra | • Ejemplo: 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 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í: | El archivo config/routes.ini se ve así: | ||
Línea 455: | Línea 456: | ||
direccionamiento dinámico. | direccionamiento dinámico. | ||
− | '''Dinámico''' | + | =='''Dinámico'''== |
Ocurre cuando en ejecución necesitamos cambiar el flujo normal y pasar a otro controlador o a otra acción. | 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: | El principal método para hacer esto es usar el método route_to: | ||
Línea 474: | Línea 475: | ||
de filtros que serán aplicados a datos que lo requieran. | de filtros que serán aplicados a datos que lo requieran. | ||
− | ='''Que es un Filtro?'''= | + | =='''Que es un Filtro?'''== |
Un filtro es utilizado habitualmente para eliminar porciones no deseadas de una entrada | Un filtro es utilizado habitualmente para eliminar porciones no deseadas de una entrada | ||
de datos, y la porción deseada de la entrada pasa a través de la producción como filtro | de datos, y la porción deseada de la entrada pasa a través de la producción como filtro | ||
Línea 491: | Línea 492: | ||
− | ='''Utilización Básica'''= | + | =='''Utilización Básica'''== |
En este ejemplo se le pasa por el constructor de class Filter dos(upper, htmlspecialchars) | En este ejemplo se le pasa por el constructor de class Filter dos(upper, htmlspecialchars) | ||
filtros que serán aplicados a la cadena. | filtros que serán aplicados a la cadena. | ||
Línea 517: | Línea 518: | ||
</source> | </source> | ||
− | ='''Métodos de la clase Filter'''= | + | =='''Métodos de la clase Filter'''== |
A continuación se listan los métodos disponibles en la clase filter, el constructor de la | A continuación se listan los métodos disponibles en la clase filter, el constructor de la | ||
clase filter puede recibir los filtros a ser aplicados. | clase filter puede recibir los filtros a ser aplicados. | ||
− | '''Add_filter($filter)''' | + | ==='''Add_filter($filter)'''=== |
Agregar un filtro a la cola de filtros. | Agregar un filtro a la cola de filtros. | ||
− | '''Apply($var, [filters])''' y '''apply_filter($var, [filters])''' | + | |
+ | ==='''Apply($var, [filters])'''=== y ==='''apply_filter($var, [filters])'''=== | ||
Aplica un filtros o un grupo de filtros a la variable $var. | Aplica un filtros o un grupo de filtros a la variable $var. | ||
− | '''Get_instance()''' | + | ==='''Get_instance()'''=== |
Obtiene una instancia singlenton. | Obtiene una instancia singlenton. | ||
− | '''Filtros Disponibles''' | + | ==='''Filtros Disponibles'''=== |
Actualmente se cuenta con una serie de filtros que pueden utilizados. | Actualmente se cuenta con una serie de filtros que pueden utilizados. | ||
− | '''Addslashes''' | + | ==='''Addslashes'''=== |
Filtra una cadena haciendo addslashes | Filtra una cadena haciendo addslashes | ||
− | '''Alnun''' | + | ==='''Alnun'''=== |
Filtra una cadena para que contenga solo alpha-numeic. | Filtra una cadena para que contenga solo alpha-numeic. | ||
− | '''Alpha''' | + | ==='''Alpha'''=== |
Filtra una cadena para que contenga solo alfabético | Filtra una cadena para que contenga solo alfabético | ||
− | '''Date''' | + | ==='''Date'''=== |
Filtra una cadena para que contenga el formato fecha, debe cumplir con un patrón. | Filtra una cadena para que contenga el formato fecha, debe cumplir con un patrón. | ||
− | '''Digit''' | + | ==='''Digit'''=== |
Filtra una cadena para que contenga solo Dígitos, sigue siendo un string lo que retorna el | Filtra una cadena para que contenga solo Dígitos, sigue siendo un string lo que retorna el | ||
método. | método. | ||
− | '''Htmlentities''' | + | ==='''Htmlentities'''=== |
Filtra una cadena y hace que todos los caracteres que tengan una entidad equivalente en | Filtra una cadena y hace que todos los caracteres que tengan una entidad equivalente en | ||
HTML serán cambiados a esas entidades. | HTML serán cambiados a esas entidades. | ||
− | '''htmlspecialchars''' | + | ==='''htmlspecialchars'''=== |
Filtra una cadena htmlspacialchars. | Filtra una cadena htmlspacialchars. | ||
− | '''Upper''' | + | ==='''Upper'''=== |
Filtra una cadena para que contenga solo Mayusculas | Filtra una cadena para que contenga solo Mayusculas | ||
− | '''Trim''' | + | ==='''Trim'''=== |
Filtra una cadena haciendo trim | Filtra una cadena haciendo trim | ||
− | '''Striptags''' | + | ==='''Striptags'''=== |
Filtra una cadena para eliminar etiquetas | Filtra una cadena para eliminar etiquetas | ||
− | '''Stripspace''' | + | ==='''Stripspace'''=== |
Filtra una cadena para eliminar espacios | Filtra una cadena para eliminar espacios | ||
− | '''Stripslaches''' | + | ==='''Stripslaches'''=== |
Filtra una cadena haciendo stripslashes | Filtra una cadena haciendo stripslashes | ||
− | '''Numeric''' | + | ==='''Numeric'''=== |
Filtra una cadena para que contenga solo numerico. | Filtra una cadena para que contenga solo numerico. | ||
− | '''Nl2br''' | + | ==='''Nl2br'''=== |
Filtra una cadena convirtiendo caracteres de nueva linea en <br> | Filtra una cadena convirtiendo caracteres de nueva linea en <br> | ||
− | '''Md5''' | + | ==='''Md5'''=== |
Filtra una cadena encriptando a md5. | Filtra una cadena encriptando a md5. | ||
− | '''Lower''' | + | ==='''Lower'''=== |
Filtra una cadena para que contenga solo minuscula. | Filtra una cadena para que contenga solo minuscula. | ||
− | '''Ipv4''' | + | ==='''Ipv4'''=== |
Filtra una cadena para que sea de tipo ipv4, debe cumplir con el patrón. | Filtra una cadena para que sea de tipo ipv4, debe cumplir con el patrón. | ||
− | '''Int''' | + | ==='''Int'''=== |
Filtra una cadena para que sea de tipo entero, retorna un integer método. | Filtra una cadena para que sea de tipo entero, retorna un integer método. |
Revisión del 22:43 1 jun 2009
Sumario
- 1 ApplicationController
- 2 Métodos de la Clase ApplicationController
- 2.1 Render($view)
- 2.2 Redirect($url, $seconds=0.5)
- 2.3 Post($value)
- 2.4 Get($value)
- 2.5 Request($value)
- 2.6 Render_partial($name)
- 2.7 Redirect($url_controlador)
- 2.8 Cache_layout($minutes)
- 2.9 Not_found($controller, $action)
- 2.10 Set_response($type)
- 2.11 Is_alnum($valor)
- 2.12 Load_record($record)
- 2.13 is_numeric($valor)
- 3 Obtener valores desde una de Kumbia
- 4 ApplicationControllerBase
- 5 Enrutamiento y Redirecciones
- 6 Filter
- 6.1 Que es un Filtro?
- 6.2 Utilización Básica
- 6.3 Métodos de la clase Filter
- 6.3.1 Add_filter($filter)
- 6.3.2 Apply($var, [filters])=== y ===apply_filter($var, [filters])
- 6.3.3 Get_instance()
- 6.3.4 Filtros Disponibles
- 6.3.5 Addslashes
- 6.3.6 Alnun
- 6.3.7 Alpha
- 6.3.8 Date
- 6.3.9 Digit
- 6.3.10 Htmlentities
- 6.3.11 htmlspecialchars
- 6.3.12 Upper
- 6.3.13 Trim
- 6.3.14 Striptags
- 6.3.15 Stripspace
- 6.3.16 Stripslaches
- 6.3.17 Numeric
- 6.3.18 Nl2br
- 6.3.19 Md5
- 6.3.20 Lower
- 6.3.21 Ipv4
- 6.3.22 Int
ApplicationController
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 modelos y la presentación. 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. • 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.
Render($view)
Visualiza una vista que pertenece al mismo controlador. Ejemplo:
1. <?php
2.
3. class ProductosController extends ApplicationController {
4.
5. function index(){
6. $this>
render('consultar');
7. }
8.
9. } //fin de la clase
10.
11.?>
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
1. <?php
2.
3. class ProductosController extends ApplicationController {
4.
5. function index(){
6. $this>
redirect('facturas/nueva', 2);
7. }
8.
9. }
10.
11.?>
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 pasar al array asociativo.
Get($value)
Obtiene acceso orientado a objetos a los valores de $_GET, $value es el índice para pasar al array asociativo.
Request($value)
Obtiene acceso orientado a objetos a los valores de $_REQUEST, $value es el índice para pasar al array asociativo.
Render_partial($name)
Visualiza una vista parcial (partial) que pertenece al mismo controlador. Ejemplo:
1. <?php
2.
3. class ProductosController extends ApplicationController {
4.
5. function index(){
6. $this>
render_partial('mostrar_menu');
7. }//fin del metodo
8.
9. }//fin de la clase
10.
11.?>
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. 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:
1. return $this>
route_to("controller: clientes", "action: consultar", "id:1");
El tipo de enrutamiento que realiza es interno, es decir que lo usuarios no notan cuando 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 explorador. Ejemplo:
1. $this>
redirect(“/productos/query”);
Cache_layout($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 llamará cuando no encuentre definida alguna acción así es más fácil controlar este tipo de errores:
1. <?php
2. 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.?>
NOTA: Ahora en la versión 0.5 se incluye un vista views/not_found.phtml, esto hace que no se haga necesario la implementacion del metodo not_found, ya que cuando no exista un controller o una acción se renderizara dicha vista, esta puede ser totalmente personalizada de manera que sea mas comodo el desarrollo
Set_response($type)
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 cualquier cabecera html. Es ideal en salidas AJAX o PDF. Otro valor para $type es XML.
1. <?php
2. class PruebaController extends ApplicationController {
3.
4. function accion_ajax(){
5. $this>
set_response(“view”);
6. }
7. }
Is_alnum($valor)
Evalúa si un campo es alfanumérico o no. Es útil para validar la entrada de datos al recibirlos por parte de usuarios.
1. <?php
2. class PruebaController extends ApplicationController {
3.
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.?>
Load_record($record)
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
===string: ===este debe corresponder al nombre de un modelo Soporta argumento variable.
===field:=== campos a cargar separados por coma
===except:=== campos que no se cargaran separados por coma
===suffix:=== sufijo para el atributo en el controlador
===preffix:=== prefijo para el atributo en el controlador
//Ejemplo1:
$usuario = $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');
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.
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.?>
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í:
1. <?php
2.
3. class ProductosController extends ApplicactionController {
4.
5. public function buscar($id){
6. /* */
7. }
8. }
9.
10.?>
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í:
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?'''==
<source lang=php line>
1. public function buscar(){
2. $controlador = $this>
controller_name;
3. }
¿Cómo saber el nombre de la acción actual?
1. public function buscar(){
2. $controlador = $this>
action_name;
3. }
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:
1. <?php
2.
3. class RegistroController extends ApplicactionController {
4.
5. public function buscar_fecha($año, $mes, $dia){
6. /* */
7. }
8. }
9.
10.?>
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í:
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. }
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:
1. Array
2. (
3. [0] => registro
4. [1] => buscar_fecha
5. [2] => 2006
6. [3] => 12
7. [4] => 01
8. )
ApplicationControllerBase
Es una clase definida en el archivo controllers/application.php, de esta forma:
1. <?php
2.
3. class ControllerBase {
4.
5.
6. }//fin de la clase
7.
8. ?>
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.
1. <?php
2.
3. class ControllerBase {
4.
5. protected function seguridad(){
6. /* ... */
7. }
8.
9. }//fin de la clase
10.
11.?>
y por ejemplo en el controlador productos podríamos usar este método así:
1. <?php
2.
3. class Productos extends ApplicationController {
4.
5. public function adicionar(){
6.
7. if($this>
seguridad()){
8. /* .... */
9. }
10.
11. }
12.
13. }//fin de la clase
14.
15. ?>
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 • Ejemplo: El usuario trata de acceder a una acción que no existe y queremos enviarla a una válida. • Ejemplo: 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í:
1. ; Usa este archivo para definir el enrutamiento estático entre
2. ; controladores y sus acciones
3. ;
4. ; Un controlador se puede enrutar a otro controlador utilizando '*' como
5. ; comodín así:
6. ; controlador1/accion1/valor_id1 = controlador2/accion2/valor_id2
7. ;
8. ; Ej:
9. ; Enrutar cualquier petición a posts/adicionar a posts/insertar/*
10.; posts/adicionar/* = posts/insertar/*
11.;
12.; Enrutar cualquier petición a cualquier controlador en la acción
13.; adicionar a posts/adicionar/*
14.; */adicionar/* = posts/insertar/*
15.
16.[routes]
17.prueba/ruta1/* = prueba/ruta2/*
18.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: 1. 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
1. return $this->route_to("controller: clientes", "action: consultar", "id:1");
No todos los parámetros son obligatorios sólo el que sea necesario.
Filter
Para la Versión 0.5 se incorpora el componente Filter el cual proporciona un conjunto de filtros que serán aplicados a datos que lo requieran.
Que es un Filtro?
Un filtro es utilizado habitualmente para eliminar porciones no deseadas de una entrada de datos, y la porción deseada de la entrada pasa a través de la producción como filtro (por ejemplo, café). En estos escenarios, un filtro es un operador que produce un subconjunto de la entrada. Este tipo de filtro es útil para aplicaciones web - la supresión de entrada ilegal, innecesario el recorte de los espacios en blanco, etc. Esta definición básica de un filtro puede ser ampliado para incluir a las transformaciones generalizadas de entrada. Una transformación que se debe aplicar a las aplicaciones web es el escapar de las entidades HTML. Por ejemplo, si un campo de formulario es automáticamente poco fiable de entrada, este valor debe ser libre de las entidades HTML, a fin de evitar las vulnerabilidades de seguridad. Para cumplir con este requisito, las entidades HTML que aparecen en la entrada debe ser eliminado o que se hayan escapado. Por supuesto, enfoque que es más apropiado depende de la situación. Un filtro que elimina las entidades HTML opera dentro del ámbito de aplicación de la primera definición de filtro - un operador que produce un subconjunto de la entrada.
Utilización Básica
En este ejemplo se le pasa por el constructor de class Filter dos(upper, htmlspecialchars) filtros que serán aplicados a la cadena.
$filter = new Filter('upper', 'htmlspecialchars');
$var = '<b>Hola</b>';
print_r($filter->apply($var)); //<B>HOLA</B>
A continuación se aplica el filtro de manera dinámica.
$filter = new Filter();
$var = '<b>Hola</b>';
print_r( $filter->apply_filter($var, 'upper', 'htmlspecialchars')) //<B>HOLA</B>
Otra forma de aplicar filtros
$var = '<b>Hola</b>';
$filter = new Filter('upper', 'htmlspecialchars');
print_r ($filter->filter_value($var));
Adicionalmente los filtros soportan como parámetros a filtrar array
$var = array('<b>Hola</b>');
$filter = new Filter('upper', 'htmlspecialchars');
print_r( $filter->apply($var));//<B>HOLA</B>
Métodos de la clase Filter
A continuación se listan los métodos disponibles en la clase filter, el constructor de la clase filter puede recibir los filtros a ser aplicados.
Add_filter($filter)
Agregar un filtro a la cola de filtros.
Apply($var, [filters])=== y ===apply_filter($var, [filters])
Aplica un filtros o un grupo de filtros a la variable $var.
Get_instance()
Obtiene una instancia singlenton.
Filtros Disponibles
Actualmente se cuenta con una serie de filtros que pueden utilizados.
Addslashes
Filtra una cadena haciendo addslashes
Alnun
Filtra una cadena para que contenga solo alpha-numeic.
Alpha
Filtra una cadena para que contenga solo alfabético
Date
Filtra una cadena para que contenga el formato fecha, debe cumplir con un patrón.
Digit
Filtra una cadena para que contenga solo Dígitos, sigue siendo un string lo que retorna el método.
Htmlentities
Filtra una cadena y hace que todos los caracteres que tengan una entidad equivalente en HTML serán cambiados a esas entidades.
htmlspecialchars
Filtra una cadena htmlspacialchars.
Upper
Filtra una cadena para que contenga solo Mayusculas
Trim
Filtra una cadena haciendo trim
Striptags
Filtra una cadena para eliminar etiquetas
Stripspace
Filtra una cadena para eliminar espacios
Stripslaches
Filtra una cadena haciendo stripslashes
Numeric
Filtra una cadena para que contenga solo numerico.
Nl2br
Filtra una cadena convirtiendo caracteres de nueva linea en
Md5
Filtra una cadena encriptando a md5.
Lower
Filtra una cadena para que contenga solo minuscula.
Ipv4
Filtra una cadena para que sea de tipo ipv4, debe cumplir con el patrón.
Int
Filtra una cadena para que sea de tipo entero, retorna un integer método.