我想将一个参数从控制器传递给表单,但参数有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']);为空
答案 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?你有没有忽视这个?