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 的受保护成员通过错误,它是未定义的