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'''=
+
'''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
*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
  
*Automatiza la interacción entre la lógica y la presentación
+
'''Métodos de la Clase ApplicationController'''
 
 
*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)'''==
+
'''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>
  function index(){
+
render('consultar');
    $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)'''==
+
'''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.
  function index(){
+
5. function index(){
    $this->redirect('facturas/nueva', 2);
+
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)'''==
+
'''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>
+
<source lang=php line>
<?php
+
1. <?php
 
+
2.
  class ProductosController extends ApplicationController {
+
3. class ProductosController extends ApplicationController {
 
+
4.
  function index(){
+
5. function index(){
    $this->render_partial('mostrar_menu');
+
6. $this>
  }//fin del metodo
+
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])'''==
+
'''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
'''controller''': A qué controlador se va a redireccionar
+
• id: Id de la redirección
 
 
'''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->route_to("controller: clientes", "action: consultar", "id:1");
+
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.
 
+
'''Aviso:'''
+
'''Redirect($url_controlador)'''
En la 0.5 en adelante es mejor usar Router::route_to
+
Realiza un redireccionamiento a otro controlador/accion mediante HTTP. Es útil cuando
<source lang=php>
+
queremos hacer una real redirección que incluso cambie la URL que aparece en el
return Router::route_to("controller: clientes", "action: consultar", "id:1");
 
</source>
 
 
 
=='''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.
 
explorador.
 
 
Ejemplo:
 
Ejemplo:
<source lang=php>
+
<source lang=php line>
$this->redirect(“/productos/query”);
+
1. $this>
 +
redirect(“/productos/query”);
 
</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
 
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(){
  function index(){
+
5. $this>
    $this->render_text("Este es el index");
+
render_text("Este es el index");
  }
+
6. }
 
+
7.
  function not_found($controller, $action){
+
8. function not_found($controller, $action){
    Flash::error("No esta definida la accion $action, redireccionando a index...");
+
9. Flash::error("No esta definida la accion $action, redireccionando
  return $this->route_to('action: index');
+
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)'''==
+
'''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”);
  function accion_ajax(){
+
6. }
    $this->set_response('view');
+
7. }
  }
 
}
 
 
</source>
 
</source>
  
=='''Is_alnum($valor)'''==
+
'''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>
  function adicionar(){
+
request(“nombre”);
    $nombre = $this->request(“nombre”);
+
6. if($this>
    if($this->is_alnum($nombre)==false){
+
is_alnum($nombre)==false){
      Flash::error(“Entrada invalidad para precio”);
+
7. Flash::error(“Entrada invalidad para precio”);
    return;
+
8. return;
    }
+
9. }
  /* ..*/
+
10. /* ..*/
  }
+
11. }
}
+
12. }
?>
+
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
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->find(1);
+
$usuario = $this>
$this->load_record($usuario);
+
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'''
  
//Ejemplo2:
+
El sitio es: '''kumbia.org'''
$usuario = $this->Usuario->find(1);
+
La aplicación es: '''aplicacion'''
$this->load_record($usuario, 'except: id, sexo');
+
El controlador es: '''productos'''
 +
La acción es: '''buscar'''
 +
El valor para id es: '''12'''
  
//Ejemplo3:
+
Nuestro controlador aplicación/productos_controller.php luce así:
$usuario = $this->Usuario->find(1);
+
<source lang=php line>
$this->load_record($usuario, 'field: nombre, apellido');
+
1. <?php
 +
2.
 +
3. class ProductosController extends ApplicactionController {
 +
4.
 +
5. public function buscar($id){
 +
6. /* */
 +
7. }
 +
8. }
 +
9.
 +
10.?>
 +
</source>
  
//Ejemplo4:
+
Dentro del método buscar podemos obtener el valor de id osea 12 en nuestro ejemplo
$usuario = $this->Usuario->find(1);
+
colocando un parámetro al controlador $id podemos recoger este valor y utilizarlo
$this->load_record($usuario, 'preffix: c_');
+
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>
  
//Ejemplo5:
+
¿Cómo saber el nombre del controlador actual?
$this->load_record('Usuario');
+
<source lang=php line>
 +
1. public function buscar(){
 +
2. $controlador = $this>
 +
controller_name;
 +
3. }
 +
</source>
  
//Ejemplo6:
+
¿Cómo saber el nombre de la acción actual?
$this->load_record('Usuario', 'field: nombre, apellido');
+
<source lang=php line>
 +
1. public function buscar(){
 +
2. $controlador = $this>
 +
action_name;
 +
3. }
 
</source>
 
</source>
  
=='''is_numeric($valor)'''==
+
Ahora veamos el siguiente ejemplo:
Evalúa si un campo es numérico o no.
+
'''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'''
  
Es útil para validar la entrada de datos al recibirlos por parte de usuarios.
+
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>
  
class PruebaController extends ApplicationController {
+
Como vemos los valores adicionales en la URL son automáticamente agregados como
 +
parámetros en la acción del controlador.
  
  function adicionar(){
+
'''¿Que pasa con id en este ejemplo?'''
    $precio = $this->request(“precio”);
+
'''$id '''es el valor del primer parámetro siempre así que si nos referimos a éste,
    if($this->is_numeric($precio)==false){
+
encontramos que tiene el valor 2006.
      Flash::error(“Entrada invalida para precio”);
+
'
      return;
+
'''¿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>
  
[[Categoría:Application Controller]]
+
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>

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)