如何从FOSUserBundle Symfony2.8中删除表单字段?

时间:2016-09-02 10:41:42

标签: symfony fosuserbundle

我在Symfony项目中安装了FOSUserBundle。现在我想删除FOSUserBundle默认提供的注册表单字段。

注册表格字段是:

  

用户名

     

电子邮件ID

     

密码

     

重复密码

现在,当用户注册时我不想要Email字段,所以我在我的包中覆盖注册表单。

\\ Front\FrontBundle\Form\RegistrationType.php
<?php
namespace Front\FrontBundle\Form;

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

class RegistrationType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
   {
      $builder->remove('email'); // here I code for remove email field.
   }



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

    // Or for Symfony < 2.8
    // return 'fos_user_registration';
  }

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

   // For Symfony 2.x
  public function getName()
  {
    return $this->getBlockPrefix();
  }

}

然后我更改config.yml和services.yml文件

\\ App/config/config.yml

fos_user:
db_driver: orm 
firewall_name: main
user_class: Front\FrontBundle\Entity\User
registration:
    form:
        type: Front\FrontBundle\Form\RegistrationType




\\app/config/services.yml
services:
app.form.registration:
    class: Front\FrontBundle\Form\RegistrationType
    tags:
        - { name: form.type, alias: app_user_registration }  

所以完成此电子邮件字段后,请从我的注册表中删除,但在填写usernamepasswordrepeat password之后我提交表单时,它会给我任何错误{ {1}}。

所以我需要更改任何其他文件以使用电子邮件字段删除电子邮件验证?

感谢。

1 个答案:

答案 0 :(得分:0)

您可以像现在一样删除该字段,但必须确保没有需要它的残留服务器端验证。

如何执行此操作取决于您如何扩展FOS用户类(或者如果有)。

带注释的约束例如(来自the docs

class Author
{
    /**
     * @Assert\NotBlank()           <--- remove this
     */
    public $name;
}
  • 如果你扩展了这个类,你可以从你自己的成员定义中删除它。
  • 如果您没有对其进行扩展,请对其进行扩展,然后不要放入验证约束。
  • 或者其他一切都失败了(我认为这很麻烦),在致电isValid()之前在控制器中发出默认值。

    public function someAction(Request $request) {
        // ...
    
        $user = new User();
    
        // fill empty value
        $user->setEmail('blank@blank.blank');
    
        // form stuff here
        // ...
        if ($form->isValid()) {
            // do some stuff
        }
    
        return $this->render(blahblahbal);
    }