Deseo eliminar la necesidad de un nombre de usuario en FOSUserBundle. Mis usuarios iniciarán sesión solo con una dirección de correo electrónico y agregué campos de nombre real como parte de la entidad de usuario. me di cuenta que tenía que volver a hacer todo el mapeo como se describe here. Creo que lo he hecho correctamente, pero cuando trato de enviar el formulario de inscripción consigo el error:FOSUserBundle anula la asignación para eliminar la necesidad de nombre de usuario
nombres "único campo asignado por la doctrina puede ser validado por singularidad ".
Lo extraño es que no he intentado imponer una restricción única a nada en la entidad de usuario.
Aquí está mi archivo completo entidad de usuario:
<?php
// src/MyApp/UserBundle/Entity/User.php
namespace MyApp\UserBundle\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity
* @ORM\Table(name="depbook_user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=255)
*
* @Assert\NotBlank(message="Please enter your first name.", groups={"Registration", "Profile"})
* @Assert\MaxLength(limit="255", message="The name is too long.", groups={"Registration", "Profile"})
*/
protected $firstName;
/**
* @ORM\Column(type="string", length=255)
*
* @Assert\NotBlank(message="Please enter your last name.", groups={"Registration", "Profile"})
* @Assert\MaxLength(limit="255", message="The name is too long.", groups={"Registration", "Profile"})
*/
protected $lastName;
/**
* @ORM\Column(type="string", length=255)
*
* @Assert\NotBlank(message="Please enter your email address.", groups={"Registration", "Profile"})
* @Assert\MaxLength(limit="255", message="The name is too long.", groups={"Registration", "Profile"})
* @Assert\Email(groups={"Registration"})
*/
protected $email;
/**
* @ORM\Column(type="string", length=255, name="email_canonical", unique=true)
*/
protected $emailCanonical;
/**
* @ORM\Column(type="boolean")
*/
protected $enabled;
/**
* @ORM\Column(type="string")
*/
protected $salt;
/**
* @ORM\Column(type="string")
*/
protected $password;
/**
* @ORM\Column(type="datetime", nullable=true, name="last_login")
*/
protected $lastLogin;
/**
* @ORM\Column(type="boolean")
*/
protected $locked;
/**
* @ORM\Column(type="boolean")
*/
protected $expired;
/**
* @ORM\Column(type="datetime", nullable=true, name="expires_at")
*/
protected $expiresAt;
/**
* @ORM\Column(type="string", nullable=true, name="confirmation_token")
*/
protected $confirmationToken;
/**
* @ORM\Column(type="datetime", nullable=true, name="password_requested_at")
*/
protected $passwordRequestedAt;
/**
* @ORM\Column(type="array")
*/
protected $roles;
/**
* @ORM\Column(type="boolean", name="credentials_expired")
*/
protected $credentialsExpired;
/**
* @ORM\Column(type="datetime", nullable=true, name="credentials_expired_at")
*/
protected $credentialsExpiredAt;
public function __construct()
{
parent::__construct();
// your own logic
}
/**
* @return string
*/
public function getFirstName()
{
return $this->firstName;
}
/**
* @return string
*/
public function getLastName()
{
return $this->lastName;
}
/**
* Sets the first name.
*
* @param string $firstname
*
* @return User
*/
public function setFirstName($firstname)
{
$this->firstName = $firstname;
return $this;
}
/**
* Sets the last name.
*
* @param string $lastname
*
* @return User
*/
public function setLastName($lastname)
{
$this->lastName = $lastname;
return $this;
}
}
que he visto varias sugerencias acerca de esto, pero ninguna de las sugerencias parece funcionar para mí. Los documentos de FOSUserBundle son muy escasos sobre lo que debe ser una solicitud muy común.
Estaba considerando la posibilidad de establecer un nombre de usuario aleatorio solo para mantener al fósil feliz, pero configurar el correo electrónico tiene mucho más sentido. ¡Solución simple y elegante! – Prathap
También puede llamar a 'parent :: setEmail ($ email)' después de configurar 'username' (en caso de un cambio en el código del paquete). El método principal también 'return $ this;', lo que hace que los métodos sean encadenables. – Brewal