从控制器到表单的参数始终为空值

时间:2016-08-03 23:06:05

标签: php symfony

我想将一个参数从控制器传递给表单,但参数有alwyas null值。

这是控制器

$form = $this->createForm(BaseType::class, $entity, array('nom' => 'Informatique'));

这是FormType

 ->add('departement', EntityType::class, array(
            'class'=> 'AppBundle\Entity\Departement',
            'choice_label' => 'nom',
            'multiple' => false,
            'expanded' => false,
            'query_builder' => function(DepartementRepository $er ) use($options)  {
                return $er->createQueryBuilder('d')
                    ->where('d.nom like :nom')
                    ->setParameter('nom', '%' .$options['nom']. '%')
                    ;
            }
        ))

 public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\Formation',
        'nom' => null,
    ));
}

var_dump的输出($ options ['nom']);为空

2 个答案:

答案 0 :(得分:2)

createForm的第三个参数是数组$options,它可以包含..你想要的任何东西。

所以在你的控制器中:

public function yourAction()
{
    $form = $this->createForm(
        DocumentType::class,
        $document,
        ['yourCustomOption' => 'value']
    );

您可以在FormType中访问或设置默认值:

public function buildForm(FormBuilderInterface $builder, array $options)
{
   $yourCustomOption = $options['yourCustomOption']; //will be 'value'
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'yourCustomOption' => 'Default value',
    ));
}

答案 1 :(得分:0)

在您的代码中,您已经设置了“#nom;' null ,所以你可能(我猜测)需要改变它:

public function configureOptions(OptionsResolver $resolver)
{
  $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\Formation',
        'nom' => 'some nom value',
  ));
}

我不知道为什么你把它设置为null然后你期望它不是null?你有没有忽视这个?