Symfony2 : récupérer ses entités directement dans le contrôleur (magique)

22 sept

Qui ne se souvient pas de la magie de Symfony1, qui récupérait les données directement via l’URL, de façon magique?

Qui n’en a pas assez, avec Symfony2, de toujours vérifier l’existence de telle ou telle entité dont l’ID a été passé à la méthode correspondant à l’action dans le contrôleur? Je vois votre visage tout triste :(

Heureusement, papa est là pour vous expliquer comment, de façon toute simple, vous éviter les copier-coller dans vos contrôleurs, et ne plus récupérer/vérifier manuellement vos entités :)

Alors qu’avant vous auriez écrit un truc du genre :

<?php
public function showAction($id)
{
	$article = $this->get('doctrine')->getEntityManager()->getRepository('Microclimat\BlogBundle\Entity\Article')->find($id);
	if(!$article) {
		throw new NotFoundHttpException("Can not find this article");
	}

	return array(
		'article' => $article
	);
}

Maintenant, vous n’avez plus qu’à écrire dans votre contrôleur :

<?php
use Microclimat\BlogBundle\Entity\Article;

// ...

public function showAction(Article $article)
{
	return array(
		'article' => $article
	);
}

:D simple comme bonjour
On dit merci qui?

 

[edit]

Ne pas oublier de mettre le code suivant dans le fichier config.yml :

sensio_framework_extra:
    request: { converters: true }

4 Responses to “Symfony2 : récupérer ses entités directement dans le contrôleur (magique)”

  1. Inophage 26. sept, 2012 at 16 h 00 min #

    Hélas ça ne marche pas tout seul, il faut l’activer dans le fichier de config.yml.

    sensio_framework_extra:
    request: { converters: true }

    • Aurélien Pegny 26. sept, 2012 at 16 h 08 min #

      Merci beaucoup Inophage. Post corrigé

  2. gugelhupf 04. oct, 2012 at 23 h 53 min #

    Je ne crois pas qu’on soit obligé de toucher au config.yml
    La preuve ici http://www.siteduzero.com/tutoriel-3-517579-recuperer-directement-des-entites-doctrine-dans-son-controleur.html dans le tuto de winzou on ne touche pas au config.yml (c’est magique !).

    • Aurélien Pegny 05. oct, 2012 at 7 h 39 min #

      Cela fonctionne avec ou sans la config, mais si vous mettez « converters: false », vous obtenez une belle erreur « Closure… ». Cela doit dépendre de la version de Symfony2, en fonction de laquelle la configuration n’est peut être pas forcément à « true » par défaut.
      Donc dans le doute, mettez le paramétrage dans le fichier de configuration.

Leave a Reply

*