如何覆盖注册表格 FosUserBundle?

How to override register form FosUserBundle?

我想覆盖一些 FOSUserBundle 表单(注册表)所以我按照文档进行操作,但我不明白为什么我总是收到同样的错误:

Attempted to load class "RegistrationFormType" from namespace "OC\UserBundle\Form\Type". Did you forget a "use" statement for "FOS\UserBundle\Form\Type\RegistrationFormType"? 500 Internal Server Error - ClassNotFoundException.

这些是我的文件:

RegistrationFormType.php:

<?php
namespace OC\UserBundle\Form\Type;

use Symfony\Component\Form\FormBuilder;
use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;

class RegistrationFormType extends BaseType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        parent::buildForm($builder, $options);

        $builder->add('telephone');
    }

    public function getName()
    {
        return 'oc_user_registration';
    }
}    

Service.yml 的 OCUserBundle:

services:
    oc_user_registration:
        class: OC\UserBundle\Form\Type\RegistrationFormType
        tags:
            - {name: form.type, alias: oc_user_registration}

并且当用户尝试在 app/Ressources/config.yml:

中注册时,我将项目配置为使用我的表单类型
fos_user:
    db_driver: orm
    firewall_name: main
    user_class: OC\UserBundle\Entity\User
    registration:
        form:
            type: oc_user_registration

有人能告诉我这里出了什么问题吗?

你看https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_forms.md

一切都说明了,我已经在用了,没问题

将他的功能添加到您的注册表类型中

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

解决了这个问题。错误是 FormType 文件的路径与命名空间不同。还是谢谢你。