Quantcast
Channel: Grafikart | Derniers Sujets du forum
Viewing all articles
Browse latest Browse all 1542

Transmettre et récupérer des paramètres à un formulaire

$
0
0

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()     ));

Viewing all articles
Browse latest Browse all 1542

Trending Articles