【问题标题】:How can I override FOSUserBundle form using my own fields(Symfony 3)?如何使用我自己的字段(Symfony 3)覆盖 FOSUserBundle 表单?
【发布时间】:2017-09-28 16:45:29
【问题描述】:

我的 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';
    }

}

它给了我标准的表格,添加了“地址”和“手机号码”字段。

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

我应该更改哪些内容才能仅获取“地址”和“手机号码”字段? 谢谢!

【问题讨论】:

  • 为什么您希望在注册表单中只包含这些字段?你不会让用户选择他的登录名/密码吗?
  • 我想通过手机注册用户,而不是密码。

标签: php symfony fosuserbundle


【解决方案1】:

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

解决方案 1:

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

$builder->remove('your_field_name')

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

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

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

【讨论】:

  • 很遗憾,我的声望不到15,所以还不能宣传。
  • 我也遇到过这个名誉问题。因此,如果您希望在您的声望足够高时回来投票。祝你有一个愉快的 Symfony 日:-)
【解决方案2】:

关于这个话题有一篇很好的文章:

Overriding Default FOSUserBundle Forms

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

【讨论】:

【解决方案3】:

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

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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    相关资源
    最近更新 更多