Utiliser Doctrine 2 avec Symfony
Par Noël GUILBERT le dimanche, février 21 2010, 20:05 - Lien permanent
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));
}
}


Commentaires
Beware, in your last snippet, $page != $slug
@N1k0: fixed, thx
Salut,
J'ai juste un beau message d'un fichier de mapping non trouvé
(No mapping file found named 'Bundle\BlogBundle\Model\Entities\BlogPost'), après avoir corrigé une erreur de syntaxe de Doctrine datant du mois... d'août 2009 :( (Un collègue est en train de remonter le bug sur Jira au sujet de cet erreur de syntaxe)
@Yoann: cette solution est de toute façon à revoir, beaucoup d'améliorations ayant été apportées à Doctrine cette semaine. Je referait un article dans quelques jours à ce sujet.
Mais que deviendront nos fichier schema.YAML lors d'une migration des anciennes applications?
Mais que deviendront nos fichier schema.YAML lors d'une migration des anciennes applications?
Couldn't agree more...Had a post already written about this too, (good job i checked around first)never mind.It is a really good tune though.
Here's hoping more labels wise up and do this.