[Symfony2] Form field à sauver et utilisé dans Query Builder
Posté : 24 avr. 2013, 15:58
Hello,
j'ai un petit soucis et je ne sais pas de quel façon je suis censé faire pour le prendre en charge.
J'ai une entité "ClassSession", elle contient une relation vers un Cours, et une relation ManyToMany vers des Etudiants, afin d'indiquer ceux qui étaient présent à la session en question.
Voici l'entité:
Quelle est la bonne façon de faire dans ce cas là ? Créer une fois le formulaire, binder avec la requête, puis recréer le formulaire en passant l'ID du cours récupéré du premier ne me paraît pas très élégant.
Pour être honnête j'ai déjà posé la question sur le forum Symfony sans succès: http://forum.symfony-project.org/viewto ... 23&t=69441
J'ai beaucoup cherché mais pas trouvé d'exemples de ce type, je ne sais même pas trop comment formulé la recherche d'ailleurs.
Merci d'avance !
j'ai un petit soucis et je ne sais pas de quel façon je suis censé faire pour le prendre en charge.
J'ai une entité "ClassSession", elle contient une relation vers un Cours, et une relation ManyToMany vers des Etudiants, afin d'indiquer ceux qui étaient présent à la session en question.
Voici l'entité:
class ClassSession {
/**
* @ORM\ManyToMany(targetEntity="Student", inversedBy="classSessions")
* @ORM\JoinTable(name="class_session_students")
* @Assert\NotNull
*/
protected $classSessionStudents;
/**
* @ORM\ManyToOne(targetEntity="Course", inversedBy="classSessions")
* @ORM\JoinColumn(name="fk_course", referencedColumnName="id", nullable=false)
*/
private $course;
}
Dans le formulaire associé, j'envoie l'ID du cours lié via l'url afin de n'afficher des cases à cocher que pour les Etudiants inscrits à ce cours, voici le formulaire (un bout):
public function __construct(RegistryInterface $doctrine, $courseId = null, $organizationBranchId = null, Teacher $currentTeacher = null) {
$this->courseId = $courseId;
$this->doctrine = $doctrine;
$this->organizationBranchId = $organizationBranchId;
$this->currentTeacher = $currentTeacher;
}
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('classSessionStudents', 'entity', array(
'class' => 'VirguleMainBundle:Student',
'query_builder' => function(EntityRepository $er) use ($courseId) {
return $er->createQueryBuilder('s')
->innerJoin('s.courses', 'c2', 'WITH', 'c2.id = ?1')
->setParameters(array('1' => $courseId));
},
'expanded' => true,
'multiple' => true,
'property_path' => 'classSessionStudents',
'property' => 'fullname')
)
->add('course_id', 'hidden', array(
'data' => $this->courseId,
'mapped' => false))
;
}
}
ça, ça fonctionne bien. Le problème c'est au traitement du formulaire soumis, dans le createAction:
public function createAction(Request $request) {
$entity = new ClassSession();
$organizationBranchId = $this->getSelectedOrganizationBranchId();
$currentTeacher = $this->getConnectedUser();
$form = $this->createForm(new ClassSessionType($this->getDoctrine(), $courseId, $organizationBranchId, $currentTeacher), $entity);
$form->bind($request);
}
A l'appel du createForm, je ne peux pas lui passer le $courseId vu qu'il est dans le formulaire... et comme il est nul, le QueryBuilder ne fonctionne pas, du coup toutes mes infos sont sauvés sauf les entrées de la relation ClassSession <-> StudentQuelle est la bonne façon de faire dans ce cas là ? Créer une fois le formulaire, binder avec la requête, puis recréer le formulaire en passant l'ID du cours récupéré du premier ne me paraît pas très élégant.
Pour être honnête j'ai déjà posé la question sur le forum Symfony sans succès: http://forum.symfony-project.org/viewto ... 23&t=69441
J'ai beaucoup cherché mais pas trouvé d'exemples de ce type, je ne sais même pas trop comment formulé la recherche d'ailleurs.
Merci d'avance !