简体   繁体   English

Symfony FormType构造错误

[英]Symfony FormType construct error

My application show this error 我的应用程序显示此错误

Type error: Too few arguments to function AppBundle\\Form\\ActualiteType::__construct(), 0 passed in /Applications/MAMP/htdocs/SyndicNous/vendor/symfony/symfony/src/Symfony/Component/Form/FormRegistry.php on line 90 and exactly 2 expected 类型错误:函数AppBundle \\ Form \\ ActualiteType :: __ construct()的参数太少,0在/Applications/MAMP/htdocs/SyndicNous/vendor/symfony/symfony/src/Symfony/Component/Form/FormRegistry.php中传入90和正好2预期

My formType 我的formType

class ActualiteType extends AbstractType { /** * @var bool $admin */ private $admin; class ActualiteType extends AbstractType {/ ** * @var bool $ admin * / private $ 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';
}

} }

Do you have any idea where the problem would come from? 你知道问题会从哪里来的吗? Thank you 谢谢

I do not understand what you're trying to do. 我不明白你在做什么。 You do not need to use the constructor to pass parameters to your formType. 您不需要使用构造函数将参数传递给formType。 There is the second parameter of the buildForm method for this ($options). 这个($ options)有buildForm方法的第二个参数。

In your controller, create your form like this : 在您的控制器中,创建如下表单:

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

And modify your formType like that : 并修改您的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
        ));
    }
}

Do not forget to put the default values of your options in configureOptions method. 不要忘记在configureOptions方法中放置选项的默认值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM