[RESOLU] [Symfony2] Utilisation d'un repository dans un FormType

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] [Symfony2] Utilisation d'un repository dans un FormType

Re: [Symfony2] Utilisation d'un repository dans un FormType

par ouckileou » 26 févr. 2013, 12:26

Ok, merci pour l'astuce, je trouvais ça bizarre de devoir réécrire ta requête dans le formulaire alors que c'est sûrement qqchose de récurrent que d'avoir à utiliser les résultats de celle-ci dedans. Je vais donc faire comme ça :)

Re: [Symfony2] Utilisation d'un repository dans un FormType

par Yosh » 22 févr. 2013, 15:38

Généralement, et en bonne pratique je m'impose dans mes repository de mettre une fonction qui me renvoie un query builder et une autre méthode qui me renvoie le résultat comme cela, tu a accès à la même requête, prenoms un exemple ce sera plus parlant:
<?php

class MyRepository extends EntityRepository
{
     /**
     * @return \Doctrine\ORM\QueryBuilder
     */
    public function createDefaultQueryBuilder()
    {
        return $this->createQueryBuilder('e');
    }

    /**
     * @param $id
     * @param \InExtenso\Bundle\NotesFraisBundle\Entity\Dossier $dossier
     * @return \Doctrine\ORM\QueryBuilder
     */
    public function createGetByIdQueryBuilder($id)
    {
        return $this->createDefaultQueryBuilder()
            ->where('e.id = :id')
            ->setParameter('id', $id);
    }

    /**
     * @param $id
     * @return mixed
     */
    public function getById($id)
    {
        return $this->createGetByIdQueryBuilder($id)
            ->getQuery()
            ->getSingleResult();
    }
}
Comme ça tu peux utiliser les méthodes create* qui ne te renvoie que des QueryBuilder lorsque tu en a besoin (dans les formBuilder) et tu a aussi les méthodes get* (qui utilise les querybuilder déjà éxistant) pour te renvoyer le résultat, ce qui te permet d'avoir la même requête mais avec ou sans retour de données.

Du moins c'est comme cela que je gère mes repo.

[Symfony2] Utilisation d'un repository dans un FormType

par ouckileou » 19 févr. 2013, 14:58

Bonjour,

j'essaie de suivre les bonnes pratiques donc j'ai mis toutes mes requêtes dans un Repository, je n'ai pas encore commencé à utiliser les Managers (pas eu besoin mais ça devrait venir).

Par exemple dans StudentRepository j'ai cette méthode:
getStudentEnrolledInClass($classId) { }
qui me retourne tous les étudiants inscrits à un cours donné.

J'ai un formulaire pour enregistrer un compte-rendu pour chaque cours, dans lequel je souhaite proposer la liste des étudiants inscrits au cours afin de cocher leur présence.

Apparamment, il n'y a pas moyen de réutiliser les requêtes d'un repository dans un buildForm. Il faut utiliser le type "entity" et passer un QueryBuilder, comme là par exemple: http://stackoverflow.com/questions/8457 ... ormbuilder

Ce que j'ai fait et qui marche très bien, mais du coup j'ai deux fois la même requête à deux endroits différents de mon code, n'y a-t-il pas moyen d'appeler directement la méthode du repository dans mon formulaire ?

Comment faites-vous de votre côté ?

Merci