Installer les Behaviors Doctrine2 sous Symfony2
24 août 2011
- 2 commentaires

Voici un exemple sur comment implémenter les Behaviors via l’EventListener de Doctrine2 dans Symfony2. Dans cet exemple, nous allons mettre en place le Behavior Timestampable sur un objet Entity du model.
Récupérer les extensions de Doctrine2
Placez vous dans le dossier /vendor de votre projet Symfony
$ cd vendor
Cloner le repository git des extensions doctrine
git clone https://github.com/l3pp4rd/DoctrineExtensions.git doctrine-extensions
Vous devez avoir maintenant le dossier suivant /vendor/doctrine-extensions.
Paramétrer l’autoloader pour charger les extensions Doctrine2
Editer le fichier /app/autoload.php, et ajouter les lignes suivantes
<?php
use Symfony\Component\ClassLoader\UniversalClassLoader;
use Doctrine\Common\Annotations\AnnotationRegistry;
$loader = new UniversalClassLoader();
$loader->registerNamespaces(array(
...
'Gedmo' => __DIR__.'/../vendor/doctrine-extensions/lib',
...
));
...
$loader->register();
Utiliser les annotations pour définir les champs Timestampable dans votre Entity
Dans l’exemple suivant, nous allons ajouter les champs created_at et updated_at à l’objet Product.
<?php
namespace ...\Entity;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
...
class Product
{
...
/**
* @var datetime $created_at
*
* @ORM\Column(name="created_at", type="datetime")
* @Gedmo\Timestampable(on="create")
*/
protected $created_at;
/**
* @var datetime $updated_at
*
* @ORM\Column(name="updated_at", type="datetime")
* @Gedmo\Timestampable(on="update")
*/
protected $updated_at;
...
}
Ajouter le listener
Il faut maintenant ajouter le listener pour effectuer la mise à jour des champs created_at lors de la création,
et updated_at lors de la mise à jour, et ceci automatiquement lorsque l’Entity est persisté.
Editer votre class Bundle et ajouter ou mettre à jour la fonction boot()
public function boot()
{
$em = $this->container->get('doctrine.orm.entity_manager');
$evm = $em->getEventManager();
// Timestampable
$evm->addEventSubscriber(new \Gedmo\Timestampable\TimestampableListener());
}
Voici des liens pour plus d’information sur les extensions de Doctrine2 :
http://symfony.com/doc/2.0/cookbook/doctrine/common_extensions.html
http://www.doctrine-project.org/blog/doctrine2-behavioral-extensions
Ici vous trouverez un lien vers un Bundle pour les Doctrine Extensions:
https://github.com/stof/StofDoctrineExtensionsBundle
2 commentaires pour "Installer les Behaviors Doctrine2 sous Symfony2"
Par cmdr
le 29/12/2011 @ 12:38
Bonjour
J’ai essayé de configurer le behaviour tree de cette manière
J’obtiens l’erreur suivante :
Une exception de type ErrorException est lancé et plus rien ne marche. As tu une idée de l’origine du problème ?
Cordialement
Par Gabriel BONDAZ
le 30/12/2011 @ 11:31
Bonjour As tu bien défini les champs dont à besoin le behavior pour fonctionner sur la classe (entity) ?
exemple avec ici « CLASS_NAME » à remplacer par le nom de la classe sur laquelle tu souhaite mettre en place le behavior doctrine: