【问题标题】:FOSUserBundle : override formFOSUserBundle : 覆盖表单
【发布时间】:2011-12-18 18:56:10
【问题描述】:

我正在尝试覆盖 FOSUserBundle 表单“编辑配置文件”;我在AP/UserBundle/Form/Type 下创建了EditFormType 类:

<?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"

有什么问题?

谢谢!

【问题讨论】:

  • 尝试通过创建一个虚拟控制器并请求直接请求类型 var_dump($this->container->get('ap_edit_profile'));看看会出现什么错误。

标签: symfony


【解决方案1】:

我认为这部分配置有问题

fos_user:
    profile:
        form:
        type: ap_edit_profile

应该是这样的

fos_user:
    profile:
        form:
            type: ap_edit_profile

【讨论】:

    【解决方案2】:

    首先尝试我在评论中写的内容,可能会出现could not find bla bla 之类的错误,然后替换此行:

    命名空间 FOS\UserBundle\Form\Type;

    用这个:

    命名空间 AP/UserBundle/Form/Type;

    还要确保您的捆绑包扩展了 FOS 之一:

    public function getParent()
    {
        return 'FOSUserBundle';
    }
    

    在您的主 *Bundle.php 文件中

    【讨论】:

      【解决方案3】:

      我认为您还需要覆盖 buildUserForm() 函数而不是 buildForm()。 然后你可以将你想要的所有项目添加到表单构建器中(只是不要忘记事先调用parent::buildUserForm($builder, $options)(来自另一个question)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多