Version 3, last updated by phillipo at September 26, 2007 14:48 UTC
33-8-EventosServidor-Callbacks
33.8. Eventos del lado del Servidor (Callbacks)
En ocasiones queremos ejecutar ciertos procesos antes de realizar una inserción, modificación ó borrado con el fin de realizar validaciones, hacer movimientos en otras entidades, etc
Para esto los formularios StandardForm poseen una serie de eventos que llaman a métodos de la clase para ejecutar estas operaciones antes de y después de.
Un evento se puede definir mediante un nombre a un metodo en las propiedades de la clase asi:
Ejemplo
- ?php
- class AlbumController extends StandardForm {
- private $after_insert = "mover_kardex";
- private function mover_kardex(){
- /* ... */
- }
- }
- ?>
ó directamente con el nombre del método:
Ejemplo
- ?php 3. class AlbumController extends StandardForm {
- private function after_insert(){
- /* ... */
- }
- }
- ?>
Existen 2 tipos de eventos los before (antes de) y los after (después de). Los métodos before_ se ejecutan antes de una determinada operación y cuando devuelven false cancelan la operación que se esta trabajando. Por ejemplo un return false desde before_update cancelaría la actualización.
• Los eventos before son excelentes para validaciones pre-operación. • Los eventos after funcionan mejor para ejecutar procesos complementarios a la operación actual.
Los eventos de StandardForm son complementarios a los eventos de ActiveRecord.
A continuación una lista de eventos:
33.8.1 before_insert
Se ejecuta antes de la operación insert. Si devuelve false cancela la inserción.
33.8.2 after_insert
Se ejecuta después de la operación insert.
33.8.3 before_update
Se ejecuta antes de la operación update. Si devuelve false cancela la actualización.
Ejemplo
- ?php
- function before_update(){
- if ($this->Tareas->finalizada == "F"){
- Flash::warning("La fecha actualizada");
- //Actualiza a la fecha de hoy, cuando se finaliza...
- $this->Tareas->datafinalizada = date("Y-m-d G:i:s");
- }
- }
33.8.4 after_update
Se ejecuta después de la operación update.
33.8.5 validation
Se ejecuta antes de insertar y modificar. Ideal para validaciones de usuario.
33.8.6 before_delete
Se ejecuta antes de la operación delete. Si devuelve false cancela el borrado.
Ejemplo
- ?php
- function before_delete(){
- if ($this->Album->estado=='A'){
- Flash::error('No se puede borrar porque está activo el Album');
- //Hace falta que el metodo devuelva false asi le informara a
ActiveRecord que
- ?php
- //el evento esta cancelando la accion.
- return false;
- }
- }
33.8.7 after_delete
Se ejecuta después de la operación delete.
33.8.8 before_fetch
Se ejecuta antes de realizar la operación de mostrar un registro en la consulta.
33.8.9 after_fetch
Se ejecuta después de realizar la operación de mostrar un registro en la consulta, pero antes de mostrar el formulario.
Para acceder a los valores que se van a insertar/actualizar/borrar se puede hacer de esta forma:
Ejemplo
- ?php
- class AlbumController extends StandardForm {
- function before_delete(){
- if($this->Album->estado=='A'){
- Flash::error('No se puede borrar porque está activo el Album');
- }
- }
- ?>
De la misma forma a los valores que fueron insertados/modificados.