如何使用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,
));
答案 0 :(得分:0)
创建对象时,您没有传递任何参数。这就是你收到这条消息的原因。您可以从buildForm方法中可用的options变量获取的类型参数。
以下是表单类的示例:
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,
));
}
答案 1 :(得分:0)
您的问题的答案已经在StackOverflow上了。您可以阅读它here。我认为您需要删除__construct
函数,因为从Symfony 2.8
您必须将字符串FormType::class
传递给createForm方法,而不是对象和此字符串可能稍后作为没有任何参数的构造函数处理。然后它应该工作:))
答案 2 :(得分:0)
如果要将某些参数传递给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()
的第三个参数传递它,该参数旨在获取选项,而不是构造函数的参数。看起来你试图以错误的方式做到这一点,但我需要有更多的代码,知道你要做的是告诉你应该怎么做。