Ver índice de contenidos del libro

8.5. Lifecycle Callbacks 

En ocasiones, es necesario realizar una acción justo antes o después de insertar, actualizar o eliminar una entidad. Este tipo de acciones se conocen como lifecycle callbacks, ya que son métodos (o callbacks) que se ejecutan en alguna de las diferentes etapas por las que pasa una entidad (lifecycle).

Si utilizas anotaciones para los metadatos, debes activar primero los lifecycle callbacks. Si utilizas YAML o XML, no es necesario que lo hagas:

/**
 * @ORM\Entity()
 * @ORM\HasLifecycleCallbacks()
 */
class Product
{
    // ...
}

Ahora ya puedes decir a Doctrine que ejecute un método en cualquiera de los eventos disponibles durante el ciclo de vida de la entidad. Supongamos por ejemplo que deseas establecer el valor de una columna de fecha created a la fecha actual, sólo cuando se persiste por primera vez la entidad (es decir, cuando se inserta):

/**
 * @ORM\PrePersist
 */
public function setCreatedValue()
{
    $this->created = new \DateTime();
}
# src/Acme/StoreBundle/Resources/config/doctrine/Product.orm.yml
Acme\StoreBundle\Entity\Product:
    type: entity
    # ...
    lifecycleCallbacks:
        prePersist: [setCreatedValue]
<!-- src/Acme/StoreBundle/Resources/config/doctrine/Product.orm.xml -->
 
<!-- ... -->
<doctrine-mapping>
 
    <entity name="Acme\StoreBundle\Entity\Product">
            <!-- ... -->
            <lifecycle-callbacks>
                <lifecycle-callback type="prePersist"
                    method="setCreatedValue" />
            </lifecycle-callbacks>
    </entity>
</doctrine-mapping>

Nota En el ejemplo anterior se supone que antes has creado y mapeado una propiedad llamada created.

Ahora, justo antes de persistir la entidad por primera vez, Doctrine ejecuta automáticamente este método y establecerá el campo created a la fecha actual.

Doctrine define muchos otros eventos para el ciclo de vida de la entidad. Consulta la documentación sobre eventos de Doctrine para obtener mucha más información.

Para más información sobre qué significan estos eventos y los lifecycle callbacks, consulta la sección Events de la documentación de Doctrine.