警告:缺少BannerType :: __ construct()的参数1

时间:2016-12-20 09:50:22

标签: php symfony

如何使用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,
));

3 个答案:

答案 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()的第三个参数传递它,该参数旨在获取选项,而不是构造函数的参数。看起来你试图以错误的方式做到这一点,但我需要有更多的代码,知道你要做的是告诉你应该怎么做。