Bonjour,
Voila je rencontre un petit problème avec mon code.
Ce que je fais
Je travaille avec Symfony 3.3.10
Alors, je dois afficher un formulaire qui permet de lier des matières à des classes. Lorsque je sélectionne une matière pour une classe donnée, lors de l'ajout d'une autre matières, la/les matière/s déjà liée/s ne doit/vent par apparaître dans la liste des matières qui est un select.
Voici mon controller:
public function lierClassesMatieresAction(Request $request, $as, $classeId)
{
$em = $this->getDoctrine()->getManager();
$classe = $em->getRepository('ISIBundle:Classe')->find($classeId);
$enseignement = new Enseignement;
// $interview_form = $this->createForm(new InterviewType($id), $interview);
$form = $this->createForm(EnseignementType::class, $enseignement, [
'entity_manager' => $em,
'as' => $as,
'classeId' => $classeId]);
return $this->render('ISIBundle:Parametres:lierClassesMatieres.html.twig', array(
'asec' => $as,
'classeId' => $classeId,
'form' => $form->createView()
));
}
EntityType:
<?php
namespace ISIBundle\Form;
use Symfony\Component\Form\Type;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use ISIBundle\Repository\MatiereRepository;
class EnseignementType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$em = $options['entity_manager'];
$as = $options["as"];
$classeId = $options["classeId"];
$builder
->add('coefficient', NumberType::class)
->add('statuMatiere', CheckboxType::class)
->add('matiere', EntityType::class,
array(
'class' => 'ISIBundle:Matiere',
'query_builder' => function (MatiereRepository $matiere)/* use ($as, $classeId)*/
{
$subquery = $matiere->classesMatieres($as, $classeId);
return $matiere->createQueryBuilder()
->select('*')
->from('matiere', 'm')
->where('m.matiereid', 'NOT IN', $subquery);
},
'choice_label' => 'm.libelleMatiere',
'multiple' => false
))
->add('save', SubmitType::class, array('label' => 'Ajouter la metière'))
;
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'ISIBundle\Entity\Enseignement'
));
$resolver->setRequired('entity_manager');
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'isibundle_enseignement';
}
}
Ce que je veux
Je veux afficher ce formulaire dans lequel j'ai un champ (select) dont les données sont le résultat d'une requête que je fais avec le QueryBuilder. Ladite requête contient des paramètres car la sélection de données se fait selon des critères.
Ce que j'obtiens
The options "as", "classeId" do not exist. Defined options are: "action", "allow_extra_fields", "attr", "auto_initialize", "block_name", "by_reference", "compound", "constraints", "csrf_field_name", "csrf_message", "csrf_protection", "csrf_token_id", "csrf_token_manager", "data", "data_class", "disabled", "empty_data", "entity_manager", "error_bubbling", "error_mapping", "extra_fields_message", "inherit_data", "invalid_message", "invalid_message_parameters", "label", "label_attr", "label_format", "mapped", "method", "post_max_size_message", "property_path", "required", "translation_domain", "trim", "upload_max_size_message", "validation_groups".
Il semblerait que la transmission de paramètres au formulaire ne soit pas prise en compte:
Controller->createForm('ISIBundle\\Form\\EnseignementType', object(Enseignement), array('entity_manager' => object(EntityManager), 'as' => '1', 'classeId' => '1'))
in src\ISIBundle\Controller\ParametresController.php (line 224)
// $interview_form = $this->createForm(new InterviewType($id), $interview); $form = $this->createForm(EnseignementType::class, $enseignement, [ 'entity_manager' => $em, 'as' => $as, 'classeId' => $classeId]); return $this->render('ISIBundle:Parametres:lierClassesMatieres.html.twig', array( 'asec' => $as, 'classeId' => $classeId, 'form' => $form->createView() ));