2016-08-03 54 views
0

我想从控制器传递参数到窗体,但参数有alwyas空值。从控制器的参数形式始终为空值

这是控制器

$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的($选项[ 'NOM']);为空

+0

您需要显示“DocumentType”类的代码,以及您打算如何创建$ document对象hous? –

+0

@ Alvin Bunk:我编辑了我的问题 – hous

回答

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', 
    )); 
} 
+0

我试过你的解决方案,但参数始终为空值。我已编辑我的问题 – hous

+0

我从来没有遇到过这种情况不起作用的情况。你确定你没有压倒其他地方的价值吗?如果可能,请粘贴您的完整FormType。 – magnetik

+0

这是formType (https://gist.github.com/houssem04/b1b67009dd5506cf4623155e592fd54b) – hous

0

就在你的代码,你设置 'NOM' 到null,所以你可能(我猜)需要改变它:

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

我不知道你为什么将它设置为null,然后你期待它不为空?你忽略了这个吗?