在Symfony2.7中,我可以在创建表单时直接从 Controller 将参数传递给Form Type构造函数,但是在Symfony3中,我无法做到这一点!
在Symfony2.7中使用
$postedBy = $this->getUser()->getFullname();
$form = $this->createForm(new NewsType($postedBy));
在Symfony3中之后
$form = $this->createForm(NewsType::class); // no idea how to pass parameter?
更新:
我还想从以下位置访问它:
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
// how to access posted_by_name here which is sent from controller
}
任何帮助将不胜感激。
最佳答案
谢谢你的时间!我自己解决了这个问题:
我从NewsType构造函数中删除了参数,并使用$ options数组将数据添加到postedBy表单字段,并将数据从 Controller 传递到$ options数组,请检查以下内容:
新闻类型
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('postedBy', HiddenType::class, array(
'data' => $options['postedBy']
)
)
;
}
// WARNING: this is a MANDATORY block! Only options described here will be allowed to be passed.
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'postedBy' => null,
));
}
Controller
$form = $this->createForm(NewsType::class, $news, array(
'postedBy' => $this->getUser()->getFullname(),
);
更新:
如果要从addEventListener访问$ options数组,请使用以下代码:
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$postedBy = $event->getForm()->getConfig()->getOptions()['postedBy'];
}
希望对您有所帮助!
关于symfony-forms - 如何将参数从 Controller 传递给FormType构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36905490/