Diferencia entre revisiones de «Application controller»
(No se muestran 51 ediciones intermedias de 3 usuarios) | |||
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 | ||
pierden cuando termina la ejecución de un script. | pierden cuando termina la ejecución de un script. | ||
− | |||
− | |||
− | '''Métodos de la Clase ApplicationController''' | + | *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)''' | + | =='''Render($view)'''== |
− | Visualiza una vista que pertenece al mismo controlador. Ejemplo: | + | Visualiza una vista que pertenece al mismo controlador. |
− | <source lang=php | + | |
− | + | Ejemplo: | |
− | + | <source lang=php> | |
− | + | <?php | |
− | + | ||
− | + | class ProductosController extends ApplicationController { | |
− | + | ||
− | render('consultar'); | + | function index(){ |
− | + | $this->render('consultar'); | |
− | + | } | |
− | + | ||
− | + | } //fin de la clase | |
− | + | ||
+ | ?> | ||
</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> |
− | + | <?php | |
− | + | ||
− | + | class ProductosController extends ApplicationController { | |
− | + | ||
− | + | function index(){ | |
− | + | $this->redirect('facturas/nueva', 2); | |
− | redirect('facturas/nueva', 2); | + | } |
− | + | ||
− | + | } | |
− | + | ||
− | + | ?> | |
− | |||
</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> |
− | + | <?php | |
− | + | ||
− | + | class ProductosController extends ApplicationController { | |
− | + | ||
− | + | function index(){ | |
− | + | $this->render_partial('mostrar_menu'); | |
− | render_partial('mostrar_menu'); | + | }//fin del metodo |
− | + | ||
− | + | }//fin de la clase | |
− | + | ||
− | + | ?> | |
− | |||
</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. Recibe los | + | Hace el enrutamiento desde un controlador a otro, o desde una acción a otra. |
− | parámetros con nombre: | + | |
− | • controller: A qué controlador se va a redireccionar | + | Recibe los parámetros con nombre: |
− | • action: A que acción se va a redireccionar | + | |
− | • id: Id de la redirección | + | • '''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> |
− | + | return $this->route_to("controller: clientes", "action: consultar", "id:1"); | |
− | 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)''' | + | '''Aviso:''' |
− | Realiza un redireccionamiento a otro controlador/accion mediante HTTP. Es útil cuando | + | En la 0.5 en adelante es mejor usar Router::route_to |
− | queremos hacer una real redirección que incluso cambie la URL que aparece en el | + | <source lang=php> |
+ | 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> |
− | + | $this->redirect(“/productos/query”); | |
− | 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> |
− | + | <?php | |
− | + | ||
− | + | class PruebaController extends ApplicationController { | |
− | + | ||
− | + | function index(){ | |
− | render_text("Este es el index"); | + | $this->render_text("Este es el index"); |
− | + | } | |
− | + | ||
− | + | function not_found($controller, $action){ | |
− | + | Flash::error("No esta definida la accion $action, redireccionando a index..."); | |
− | a index..."); | + | return $this->route_to('action: index'); |
− | + | } | |
− | route_to('action: index'); | + | } |
− | + | ?> | |
− | |||
− | |||
</source> | </source> | ||
Línea 138: | Línea 150: | ||
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. |
− | $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. | + | 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. |
− | <source lang=php | + | |
− | + | Es ideal en salidas AJAX o PDF. Otro valor para $type es XML. | |
− | + | <source lang=php> | |
− | + | <?php | |
− | + | ||
− | + | class PruebaController extends ApplicationController { | |
− | set_response( | + | |
− | + | function accion_ajax(){ | |
− | + | $this->set_response('view'); | |
+ | } | ||
+ | } | ||
</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. |
− | recibirlos por parte de usuarios. | + | |
− | <source lang=php | + | Es útil para validar la entrada de datos al recibirlos por parte de usuarios. |
− | + | <source lang=php> | |
− | + | <?php | |
− | + | ||
− | + | class PruebaController extends ApplicationController { | |
− | + | ||
− | request(“nombre”); | + | function adicionar(){ |
− | + | $nombre = $this->request(“nombre”); | |
− | is_alnum($nombre)==false){ | + | if($this->is_alnum($nombre)==false){ |
− | + | Flash::error(“Entrada invalidad para precio”); | |
− | + | return; | |
− | + | } | |
− | + | /* ..*/ | |
− | + | } | |
− | + | } | |
− | + | ?> | |
</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 187: | Línea 202: | ||
'''preffix:''' prefijo para el atributo en el controlador | '''preffix:''' prefijo para el atributo en el controlador | ||
− | <source lang=php | + | <source lang=php> |
//Ejemplo1: | //Ejemplo1: | ||
− | $usuario = $this> | + | $usuario = $this->Usuario->find(1); |
− | Usuario> | + | $this->load_record($usuario); |
− | find(1); | + | |
− | $this> | ||
− | load_record($usuario); | ||
//Ejemplo2: | //Ejemplo2: | ||
− | $usuario = $this> | + | $usuario = $this->Usuario->find(1); |
− | Usuario> | + | $this->load_record($usuario, 'except: id, sexo'); |
− | find(1); | + | |
− | $this> | ||
− | load_record($usuario, 'except: id, sexo'); | ||
//Ejemplo3: | //Ejemplo3: | ||
− | $usuario = $this> | + | $usuario = $this->Usuario->find(1); |
− | Usuario> | + | $this->load_record($usuario, 'field: nombre, apellido'); |
− | find(1); | + | |
− | $this> | ||
− | load_record($usuario, 'field: nombre, apellido'); | ||
//Ejemplo4: | //Ejemplo4: | ||
− | $usuario = $this> | + | $usuario = $this->Usuario->find(1); |
− | Usuario> | + | $this->load_record($usuario, 'preffix: c_'); |
− | find(1); | + | |
− | $this> | ||
− | load_record($usuario, 'preffix: c_'); | ||
//Ejemplo5: | //Ejemplo5: | ||
− | $this> | + | $this->load_record('Usuario'); |
− | load_record('Usuario'); | + | |
//Ejemplo6: | //Ejemplo6: | ||
− | $this> | + | $this->load_record('Usuario', 'field: nombre, apellido'); |
− | 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> | ||
+ | <?php | ||
+ | |||
+ | class PruebaController extends ApplicationController { | ||
+ | |||
+ | function adicionar(){ | ||
+ | $precio = $this->request(“precio”); | ||
+ | if($this->is_numeric($precio)==false){ | ||
+ | Flash::error(“Entrada invalida para precio”); | ||
+ | return; | ||
+ | } | ||
+ | /* ..*/ | ||
+ | } | ||
+ | } | ||
+ | ?> | ||
</source> | </source> | ||
+ | |||
+ | [[Categoría:Application Controller]] |
Revisión actual del 02:13 6 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 Route_to([params: valor])
- 2.8 Redirect($url_controlador)
- 2.9 Cache_layout($minutes)
- 2.10 Not_found($controller, $action)
- 2.11 Set_response($type)
- 2.12 Is_alnum($valor)
- 2.13 Load_record($record)
- 2.14 is_numeric($valor)
ApplicationController[editar]
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[editar]
La clase posee una serie de métodos que son útiles para el trabajo con controladores.
Render($view)[editar]
Visualiza una vista que pertenece al mismo controlador.
Ejemplo:
<?php
class ProductosController extends ApplicationController {
function index(){
$this->render('consultar');
}
} //fin de la clase
?>
En este caso se visualizaría la vista views/productos/consultar.phtml
Redirect($url, $seconds=0.5)[editar]
Redirecciona la ejecución a otro controlador en un tiempo de ejecución determinado
<?php
class ProductosController extends ApplicationController {
function index(){
$this->redirect('facturas/nueva', 2);
}
}
?>
En el ejemplo va a facturas/nueva después de 2 segundos
Post($value)[editar]
Obtiene acceso orientado a objetos a los valores de $_POST, $value es el índice para pasar al array asociativo.
Get($value)[editar]
Obtiene acceso orientado a objetos a los valores de $_GET, $value es el índice para pasar al array asociativo.
Request($value)[editar]
Obtiene acceso orientado a objetos a los valores de $_REQUEST, $value es el índice para pasar al array asociativo.
Render_partial($name)[editar]
Visualiza una vista parcial (partial) que pertenece al mismo controlador. Ejemplo:
<?php
class ProductosController extends ApplicationController {
function index(){
$this->render_partial('mostrar_menu');
}//fin del metodo
}//fin de la clase
?>
En este caso se visualizaría la vista parcial views/productos/_mostrar_menu.phtml
Route_to([params: valor])[editar]
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:
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.
Aviso: En la 0.5 en adelante es mejor usar Router::route_to
return Router::route_to("controller: clientes", "action: consultar", "id:1");
Redirect($url_controlador)[editar]
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:
$this->redirect(“/productos/query”);
Cache_layout($minutes)[editar]
Caché de la vista views/layout/ correspondiente al controlador durante $minutes
Not_found($controller, $action)[editar]
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:
<?php
class PruebaController extends ApplicationController {
function index(){
$this->render_text("Este es el index");
}
function not_found($controller, $action){
Flash::error("No esta definida la accion $action, redireccionando a index...");
return $this->route_to('action: index');
}
}
?>
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)[editar]
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.
<?php
class PruebaController extends ApplicationController {
function accion_ajax(){
$this->set_response('view');
}
}
Is_alnum($valor)[editar]
Evalúa si un campo es alfanumérico o no.
Es útil para validar la entrada de datos al recibirlos por parte de usuarios.
<?php
class PruebaController extends ApplicationController {
function adicionar(){
$nombre = $this->request(“nombre”);
if($this->is_alnum($nombre)==false){
Flash::error(“Entrada invalidad para precio”);
return;
}
/* ..*/
}
}
?>
Load_record($record)[editar]
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)[editar]
Evalúa si un campo es numérico o no.
Es útil para validar la entrada de datos al recibirlos por parte de usuarios.
<?php
class PruebaController extends ApplicationController {
function adicionar(){
$precio = $this->request(“precio”);
if($this->is_numeric($precio)==false){
Flash::error(“Entrada invalida para precio”);
return;
}
/* ..*/
}
}
?>