删除电子邮件字段 FOSUserBundle

Remove email field FOSUserBundle

我需要从注册表中删除电子邮件字段。
我的解决方案是覆盖注册 FormType:

<?php
// src/AppBundle/Form/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->remove('email');
    }

该文件已成功删除,但验证过程被触发 "Please enter an email."
关于如何禁用电子邮件字段验证甚至如何以正确的方式进行技巧的任何想法。

你可以给它例如用户名的值

User.php

* @ORM\HasLifecycleCallbacks


/**
 *
 * @ORM\PrePersist()
 */
public function setEmailUser(){

    $this->email = $this->username;
}

破解实体 setter:

public function setUsername($username) {
    $username = is_null($username) ? '' : $username;
    parent::setUsername($username);
    $this->setEmail($username);
    return $this;
}

从 FormType 中删除字段:

public function buildForm(FormBuilder $builder, array $options) {
    parent::buildForm($builder, $options);
    $builder->remove('email');
}

但是 在破解它之前,你应该看看来自 jolicode 的 this presentation

如果您目前正在进行此类修改,那是因为FosUserBundle没有适配您的项目。我认为你不应该使用它。 (就个人而言,我认为这不是一个很好的捆绑包,请阅读上面的完整介绍以发表您自己的意见)

如果你想替换它,我建议你使用这个 excellent tutorial 来创建你自己的安全系统。 (到 code/paste/understand 的时间:2 或 3 小时)