如何在symfony3中使用createForm方法将参数传递给控制器中的自定义窗体类型?在BannerType.php中,参数是“类型”:
public function __construct($type){
$this->type = $type;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Banner\BannerBundle\Entity\Banner',
'type' => null,
));
}
在BannerController.php中:
$form = $this->createForm(BannerType::class, $entity, array(
'typee' => $type,
));
发布于 2016-12-20 10:04:57
创建对象时,您没有传递任何参数。这就是你收到这条消息的原因。可以从buildForm方法中提供的options变量中获取的类型参数。
下面是form类的一个示例:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$myType = $options['type'];
if ($myType == NULL){
// TODO:
}
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Banner\BannerBundle\Entity\Banner',
'type' => null,
));
}
发布于 2016-12-20 10:05:20
你的问题的答案已经在StackOverflow上了。你可以阅读它,并认为你需要删除__construct
函数,因为你必须从Symfony 2.8
传递一个字符串FormType::class
到createForm方法,而不是对象的实例,这个字符串可能会在以后作为一个没有任何参数的构造函数来处理。那么它应该可以工作了:)
发布于 2016-12-20 10:41:21
当您想要将一些参数传递到FormType
的构造器中并能够通过createForm
将其实例化时,您需要将其注册为具有适当form.type
标记的服务,如下所示:
# src/AppBundle/Resources/config/services.yml
services:
app.form.type.banner:
class: AppBundle\Form\Type\BannerType
arguments:
- '%type%'
tags:
- { name: form.type }
但这允许您只传递服务容器中可用的参数,这些参数是其他服务、参数等。
你想做的事情实际上是没有意义的。您不能期望在FormType
类的构造函数中获得参数,而是通过createForm()
的第三个参数传递它,该参数旨在接受选项,而不是构造函数的参数。看起来你试图以一种错误的方式来做这件事,但我需要更多的代码,并知道你想做什么,以告诉你应该如何做。
https://stackoverflow.com/questions/41239320
复制相似问题