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

时间:2017-09-28 16:45:30

标签: php symfony fosuserbundle

我的RegistrationType类代码:

<?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';
    }

}

它给了我标准的形式,添加了字段&#34;地址&#34;和&#34; mobileNumber&#34;。

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

我应该改变什么才能获得&#34;地址&#34;和&#34; mobileNumber&#34;字段? 谢谢!

3 个答案:

答案 0 :(得分:1)

如果您的问题是“如何从表单中删除字段”,那么:

解决方案1:

您可以使用该构建器方法

从表单中删除任何字段
$builder->remove('your_field_name')

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

解决方案2: 使用表单选项

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

答案 1 :(得分:0)

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

<强> Overriding Default FOSUserBundle Forms

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

答案 2 :(得分:0)

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

<?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';
    }

}