首页 文章

Symfony FormType构造错误

提问于
浏览
0

我的应用程序显示此错误

类型错误:函数AppBundle \ Form \ ActualiteType :: __ construct()的参数太少,0传递给/Applications/MAMP/htdocs/SyndicNous/vendor/symfony/symfony/src/Symfony/Component/Form/FormRegistry.php on第90行和预期的2

我的formType

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

}

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

1 回答

  • 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方法中放置选项的默认值 .

相关问题