Pour ceux qui souhaitent tester Symfony 2, il faut savoir que Doctrine 2 est également fournit avec le framework, et déjà pré-configuré. Il n'y a donc presque rien à faire pour que ça fonctionne.

Activer l'ORM

Dans le fichier config.yml de votre projet, ajoutez la configuration suivante:

doctrine.orm: ~

doctrine.dbal:
  dbname:    blogdb
  username: bloguser
  password:  s3cr3t

Charger les entités

Pour charger les entités, il faut utiliser le ClassLoader de Doctrine, et celui-ci à besoin de savoir où sont stockés les entités :

# /path/to/your/Bundle/Bundle.php

<?php

namespace Bundle\BlogBundle;

use Symfony\Foundation\Bundle\Bundle as BaseBundle;
use Symfony\Components\DependencyInjection\ContainerInterface;
use Doctrine\Common\ClassLoader;

class Bundle extends BaseBundle
{

  public function boot(ContainerInterface $container)
  {
    $entitiesClassLoader = new ClassLoader('Entities', __DIR__.'/model/Entities');
    $entitiesClassLoader->register();
  }
}

Créez un répertoire Entities dans le bundle, et ajoutez-y quelques entités:

<?php

namespace Bundle\BlogBundle\Model\Entities;

/**
 * @Entity
 * @Table(name="blog_post")
 */

class BlogPost {
    /**
     * @Id @Column(type="integer")
     * @GeneratedValue(strategy="AUTO")
     */

    private $id;
    /** @Column(type="string", length=255) */
    private $title;

    /** @Column(type="string", length=255) */
    private $slug;
   
    /** @Column(type="string") */
    private $body;
}

Ensuite, utiliser le conteneur de service pour récupérer l'EntityManager et manipuler vos objets:

class BlogController extends Controller
{
  public function showAction($slug)
  {
    $em   = $this->container->getService('doctrine.orm.manager');
    $post = $em->getRepository('Bundle\BlogBundle\Model\Entities\BlogPost')->findOneBy(array('slug' => $slug));

    return $this->render('BlogBundle:Blog:show', array('post' => $post));
  }
}