Comportamientos en Doctrine ORM

Los comportamientos en Doctrine permiten reutilizar y automatizar funcionalidades comunes

Los traits en PHP son clases que agrupan funcionalidades específicas diseñadas para su reutilización en otras clases. En Doctrine se emplean para reutilizar comportamientos comunes (behaviours) en diferentes entidades y repositorios.

Por ejemplo, un comportamiento común que suele aplicarse en las entidades son los timestamps automáticos, como created_at y updated_at. Estos comportamientos se pueden aplicar a cualquier tipo de entidad, y por tanto reutilizarse.

Comportamientos más utilizados

Estos son algunos de los comportamientos más utilizados de Doctrine (tan sólo pongo ejemplo en un par de ellos, ya que los demás son mas complejos y haré artículos aparte):

Timestampable - Actualiza campos de fechas cuando se crean o se modifican. Para su uso es necesario lanzar el evento PreUpdate en la función donde se quiere utilizar:

/**
 * @Id
 * @HasLifecycleCallbacks
 */

class BlogPost
{
    /**
     * @Column(type="DateTime")
     */
    private $created;

    /**
     * @Column(type="DateTime")
     */
    private $updated;

    public function __construct()
    {
        $this->created = $this->updated = new DateTime("now");
    }

    /**
     * @PreUpdate
     */
    public function updated()
    {
        $this->updated = new DateTime("now");
    }
}

Sluggable - Permite crear slugs únicos automáticamente:

class BlogPost
{
    /** @Column(type="string") */
    private $slug;

    /** @Column(type="string") */
    private $title;

    public function setTitle($title)
    {
        if ($this->slug == null) {
            $this->slug = MyStringHelper::slugize($title);
        }
        $this->title = $title;
    }

    /**
     * Añade este método si tu slug es "editable"
     */
    public function setSlug($slug)
    {
        $this->slug = $slug;
    }
}
  • Translatable - Permite traducir campos en diferentes lenguajes de forma sencilla.
  • Tree - Permite la automatización de un sistema de árbol (nested sets) con funciones específicas para repositorios.
  • SoftDeletable - Permite borrar campos.
  • Blemeable - Actualiza strings cuando se crea o actualiza una propiedad con un nombre de usuario de referencia.
  • Loggable - Permite un seguimiento de los cambios en los objetos, además de poder hacer versiones.
  • Sortable - Transforma cualquier entidad en ordenable.
  • Uploadable - Permite el manejo de la subida de archivos en los campos de las entidades.