如何将参数从控制器传递给 FormType 构造函数 [英] How to pass parameter to FormType constructor from controller
问题描述
在 Symfony2.7 中,我能够在创建表单时直接将参数从控制器传递给表单类型构造函数,但是在 Symfony3 中我无法做到!
In Symfony2.7 i was able to pass parameter to Form Type constructor directly from controller while creating the form, however in Symfony3 i'm not able to do it!
Symfony2.7 之前
$postedBy = $this->getUser()->getFullname();
$form = $this->createForm(new NewsType($postedBy));
Symfony3 之后
$form = $this->createForm(NewsType::class); // no idea how to pass parameter?
更新:我还想从以下位置访问它:
Update: I also wanted to access it from:
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
// how to access posted_by_name here which is sent from controller
}
任何帮助将不胜感激..
Any help will be highly appreciated..
推荐答案
感谢您抽出宝贵时间!我自己解决了这个问题:
Thanks for your time! i resolved this myself:
我从 NewsType 构造函数中删除了参数,并使用 $options 数组将数据添加到了 PostedBy 表单字段,并将数据从控制器传递到了 $options 数组,请检查以下内容:
I removed parameter from NewsType constructor and added data to postedBy form field using $options array, and passed data to $options array from controller, please check following:
新闻类型
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,
));
}
控制器
$form = $this->createForm(NewsType::class, $news, array(
'postedBy' => $this->getUser()->getFullname(),
);
更新:如果您想从 addEventListener 访问 $options 数组,请使用以下代码:
UPDATE: Please use below code if you want to access $options array from addEventListener:
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$postedBy = $event->getForm()->getConfig()->getOptions()['postedBy'];
}
希望对大家有所帮助!
Hope it helps somebody!
这篇关于如何将参数从控制器传递给 FormType 构造函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!