我正在尝试覆盖FOSUserBundle表单“编辑个人资料”;我在EditFormType
下创建了AP/UserBundle/Form/Type
课程:
<?php
namespace FOS\UserBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use FOS\UserBundle\Form\Type\ProfileFormType as BaseType;
class EditFormType extends BaseType
{
public function buildForm(FormBuilder $builder, array $options)
{
$child = $builder->create('user', 'form', array('data_class' => $this->class));
$this->buildUserForm($child, $options);
$builder
->add($child)
->add('Mot de passe', 'password')
->add('Nom', 'nom')
->add('Prénom', 'prenom')
->add('Civilité', 'civilite')
->add('Newsletter', 'new_letter')
;
}
public function getDefaultOptions(array $options)
{
return array('data_class' => 'FOS\UserBundle\Form\Model\CheckPassword');
}
public function getName()
{
return 'ap_edit_profile';
}
}
然后,我创建了我的服务AP/UserBundle/Resources/config/services.yml
:
services:
ap_user.edit.form.type:
class: AP\UserBundle\Form\Type\EditFormType
arguments: [%fos_user.model.user.class%]
tags:
- { name: form.type, alias: ap_edit_profile }
最后,我更新了app/config/config.yml
:
fos_user:
profile:
form:
type: ap_edit_profile
我终于得到了这个错误:Could not load type "ap_edit_profile"
有什么不对?
谢谢!
答案 0 :(得分:6)
我认为这部分配置存在问题
fos_user:
profile:
form:
type: ap_edit_profile
应该看起来像
fos_user:
profile:
form:
type: ap_edit_profile
答案 1 :(得分:0)
首先尝试我在评论中写的内容,这可能会因could not find bla bla
之类的内容而失败,然后替换此行:
名称空间FOS \ UserBundle \ Form \ Type;
用这个:
命名空间AP / UserBundle / Form / Type;
还要确保您的捆绑包扩展了FOS:
public function getParent() { return 'FOSUserBundle'; }
在你的主* Bundle.php文件
中答案 2 :(得分:0)
我认为您还需要覆盖buildUserForm()
函数而不是buildForm()
。
然后,您可以将所需的所有项目添加到表单构建器中(只是不要忘记事先调用parent::buildUserForm($builder, $options)
(来自另一个question)。