如何使用我自己的字段(Symfony 3)覆盖 FOSUserBundle 表单?

How can I override FOSUserBundle form using my own fields(Symfony 3)?

我的注册类型class代码:

<?php

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

/**
 * Форма регистрации пользователя
 */
class RegistrationType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('adress');
        $builder->add('mobileNumber');
    }

    public function getParent()
    {
        return 'FOS\UserBundle\Form\Type\RegistrationFormType';
    }

    public function getBlockPrefix()
    {
        return 'app_user_registration';
    }

}

它给我添加了字段 "adress" 和 "mobileNumber" 的标准表格。

我在哪里可以选择要使用的标准字段?

我应该更改什么以仅获取 "adress" 和 "mobileNumber" 字段? 谢谢!

关于这个主题有一篇非常好的文章:

Overriding Default FOSUserBundle Forms

您是否通过 form.type 标签将您的格式定义为服务?您是否已在 services.yml(通过 fos_user.registration.form 键)中告知 FOS 您的表单类型?

如果您的问题是 "How to remove fields from a form" 那么:

解决方案 1:

您可以使用该构建器方法从表单中删除任何字段

$builder->remove('your_field_name')

也许您还应该覆盖 FOSUser 控制器以填充您的用户实体的必填字段。这取决于您如何修改用户实体。

方案二: 使用表单选项

看这里https://knpuniversity.com/screencast/question-answer-day/remove-form-field

这是我的代码示例,是我根据您的建议编写的。我希望它对某人有所帮助)谢谢大家!

<?php

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

/**
 * Форма регистрации пользователя
 */
class RegistrationType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('address', null, [
            'label' => 'Адрес дома',
            'attr'=> [
                'placeholder' => 'placeholder-text'
                ]
            ]);
        $builder->add('mobileNumber', null, [
            'label' => 'Мобильный телефон',
            'attr'=> [
                'placeholder' => '+7 (999) 123-45-67'
                ]
        ]);
        $builder->add('username', null, [
            'label' => 'ФИО',
            'attr'=> [
                'placeholder' => 'Иванов Иван Иванович'
                ]
        ]);


        $builder->remove('email');
        $builder->remove('plainPassword');
    }

    public function getParent()
    {
//        return 'fos_user_registration';
        return 'FOS\UserBundle\Form\Type\RegistrationFormType';
    }

    public function getName()
    {
        return $this->getBlockPrefix();
    }

    public function getBlockPrefix()
    {
        return 'app_user_registration';
    }

}