FOSUserBundle でユーザー名の必要性を取り除きたいです。ユーザーはメール アドレスのみを使用してログインし、ユーザー エンティティの一部として実名フィールドを追加しました。ここで説明されているように、マッピング全体をやり直す必要があることに気付きました。 正しく行ったと思いますが、登録フォームを送信しようとするとエラーが発生します。
「一意性を検証できるのは、Doctrine によってマップされたフィールド名のみです。」
奇妙なことに、ユーザー エンティティ内の何かに対して一意の制約をアサートしようとはしていません。
これが私の完全なユーザーエンティティファイルです:
<?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;
}
}
これについてさまざまな提案を見てきましたが、どの提案もうまくいかないようです。FOSUserBundle ドキュメントは、非常に一般的な要求である必要があるものについて非常にまばらです。