Symfony FormType构造错误

时间:2017-03-09 21:04:39

标签: php symfony

我的应用程序显示此错误

  

类型错误:函数AppBundle \ Form \ ActualiteType :: __ construct()的参数太少,传入/ Applications / MAMP / htdocs / SyndicNous / vendor / symfony / symfony / src / Symfony / Component / Form / FormRegistry。第90行的PHP和预期的2个

我的formType

class 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';
}

}

你知道问题会从哪里来吗?谢谢

1 个答案:

答案 0 :(得分:3)

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

在您的控制器中,创建如下表单:

$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方法中添加选项的默认值。