Version 3, last updated by phillipo at September 26, 2007 21:48 UTC

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

  1. ?php
  2. class AlbumController extends StandardForm {
  3.  
  4. private $after_insert = "mover_kardex";
  5.  
  6. private function mover_kardex(){
  7. /* ... */
  8. }
  9. }
  10. ?>

ó directamente con el nombre del método:

Ejemplo

  1. ?php
  2. 3. class AlbumController extends StandardForm {
  3.  
  4. private function after_insert(){
  5. /* ... */
  6. }
  7. }
  8. ?>

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

  1. ?php
  2. function before_update(){
  3. if ($this->Tareas->finalizada == "F"){
  4. Flash::warning("La fecha actualizada");
  5. //Actualiza a la fecha de hoy, cuando se finaliza...
  6. $this->Tareas->datafinalizada = date("Y-m-d G:i:s");
  7.  
  8. }
  9. }

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

  1. ?php
  2. function before_delete(){
  3. if ($this->Album->estado=='A'){
  4. Flash::error('No se puede borrar porque está activo el Album');
  5. //Hace falta que el metodo devuelva false asi le informara a

ActiveRecord que

  1. ?php
  2. //el evento esta cancelando la accion.
  3. return false;
  4. }
  5. }

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

  1. ?php
  2. class AlbumController extends StandardForm {
  3.  
  4. function before_delete(){
  5. if($this->Album->estado=='A'){
  6. Flash::error('No se puede borrar porque está activo el Album');
  7. }
  8. }
  9.  
  10. ?>

De la misma forma a los valores que fueron insertados/modificados.



Regresar al indice