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>
  
[[Categoría:Application Controller]]
+
='''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>
 +
 
 +
='''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, el 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.
 +
<source lang=php line>
 +
$filter = new Filter('upper', 'htmlspecialchars');
 +
$var = '<b>Hola</b>';
 +
print_r($filter->apply($var)); //<B>HOLA</B>
 +
</source>
 +
A continuación se aplica el filtro de manera dinámica.
 +
<source lang=php line>
 +
$filter = new Filter();
 +
$var = '<b>Hola</b>';
 +
print_r( $filter->apply_filter($var, 'upper', 'htmlspecialchars')) //<B>HOLA</B>
 +
</source>
 +
 
 +
Otra forma de aplicar filtros
 +
<source lang=php line>
 +
$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>
 +
</source>
 +
 
 +
=='''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 <br>
 +
 
 +
==='''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.

Ten en cuenta que todas las contribuciones a KumbiaPHP Framework Wiki pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase Proyecto:Derechos de autor para más detalles). ¡No uses textos con copyright sin permiso!

Para editar esta página, responde la pregunta que aparece abajo (más información):

Cancelar Ayuda de edición (se abre en una ventana nueva)