Symfony FormType 构造错误

Posted

技术标签:

【中文标题】Symfony FormType 构造错误【英文标题】:Symfony FormType construct error 【发布时间】:2017-07-31 00:43:25 【问题描述】:

我的应用程序显示此错误

类型错误:函数 AppBundle\Form\ActualiteType::__construct() 的参数太少,在 /Applications/MAMP/htdocs/SyndicNous/vendor/symfony/symfony/src/Symfony/Component/Form/FormRegistry 中传递了 0。 php 在第 90 行,预计正好 2 个

我的表单类型

类 ActualiteType 扩展 AbstractType /** * @var bool $admin */ 私人 $admin;

/**
 * @var User $user
 */
private $user;

/**
 * ActualiteType constructor.
 * @param bool|false $admin
 */
public function __construct($admin = false, $user)

    $this->admin = $admin;
    $this->user = $user;


/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)

    $categories = array(
        'Travaux' => 'Travaux',
        'Voisinage' => 'Voisinage',
    );

    $builder
        ->add('title')
        ->add('category')
        ->add('content')
        ->add('datePublish')
        ->add('category', ChoiceType::class, array(
                    'choices' => $categories
            )
        );
    if ($this->user->getResidence() != null) 
        $builder->add('residence', EntityType::class, array(
            'class' => 'AppBundle:Residence',
            'choices' => $this->user->getResidence(),
        ));
     else 
        $builder->add('residence', 'entity', array(
            'class' => 'AppBundle:Residence',
            'choice_label' => 'name'
        ));
    ;


/**
 * @param OptionsResolver $resolver
 */
public function configureOptions(OptionsResolver $resolver)

    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\Actualite'
    ));


/**
 * @inheritdoc
 */
public function getBlockPrefix()

    return 'appbundle_actualite';

您知道问题出在哪里吗?谢谢

【问题讨论】:

你试图实例化表单而不传递任何参数,你需要一个 $user 因为它没有默认值 【参考方案1】:

我不明白你想做什么。您不需要使用构造函数将参数传递给您的 formType。 buildForm 方法有第二个参数($options)。

在您的控制器中,像这样创建您的表单:

$form = $this->createForm(ActualiteType::class, $actualite, [
        'admin' => $admin,
        'user'  => $user
    ]);

然后像这样修改你的 formType:

class ActualiteType extends AbstractType 

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    
        $admin  = $options['admin']; // Not used ?
        $user   = $options['user'];

        $categories = array(
            'Travaux' => 'Travaux',
            'Voisinage' => 'Voisinage',
        );

        $builder->add('title')
                ->add('category')
                ->add('content')
                ->add('datePublish')
                ->add('category', ChoiceType::class, array(
                    'choices' => $categories
                )
        );

        if ($user->getResidence() != null) 
            $builder->add('residence', EntityType::class, array(
                'class' => 'AppBundle:Residence',
                'choices' => $user->getResidence(),
            ));
         else 
            $builder->add('residence', 'entity', array(
                'class' => 'AppBundle:Residence',
                'choice_label' => 'name'
            ));
        ;
    

    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Actualite',
            'admin'      => null, // Default
            'user'       => null // Default
        ));
    

不要忘记将选项的默认值放在 configureOptions 方法中。

【讨论】:

以上是关于Symfony FormType 构造错误的主要内容,如果未能解决你的问题,请参考以下文章

使用weifenluo.winforms.ui怎么构造.loadmdiformportal.gc.maindialog,formtype

Windows 安装 Symfony 2.2 框架 - 安装成功 !!

错误的预期参数类型

Symfony 2,未定义的变量,在构造函数中初始化为 ArrayCollection 的受保护成员通过错误,它是未定义的

Symfony2:使用 FOSUserBundle 时如何在控制器内获取用户对象?

Symfony Forms EntityType 使用 JS 全选