2017-04-17 7 views
1

SymfonyのFOSUserBundleを使用してログインしたいときは、タイトルにエラーが表示され続けます。問題は、自分のUserテーブルの "id"がデータベースからすでに取得されているため、FOSUserBundleガイドで質問するような "id"フィールドを作成したくないということです。自分のコードに "id"フィールドがなくなると、なぜこのエラーが出るのか理解できません。Symfony 3とFOSUserBundleの認識できないIDフィールド

この「id」フィールドは必須ですか?

ここに私のUserクラスのコード(ここでは "Utilisateurs"と呼ばれます)があります。Doctrine \ ORM \ MappingをORMとして使用します。 BaseUserとしてFOS \ UserBundle \ Model \ Userを使用します。

/** 
* Utilisateurs 
* 
* @ORM\Table(name="utilisateurs", indexes={@ORM\Index(name="FK_UTILISATEURS_id_sexe", columns={"id_sexe"}), @ORM\Index(name="FK_UTILISATEURS_id_niveau", columns={"id_niveau"})}) 
* @ORM\Entity 
*/ 

class Utilisateurs extends BaseUser 

{ 


public function __construct() 
{ 
    parent::__construct(); 

} 

/** 
* @var string 
* 
* @ORM\Column(name="nom", type="string", length=25, nullable=true) 
*/ 
private $nom; 

/** 
* @var string 
* 
* @ORM\Column(name="prenom", type="string", length=25, nullable=true) 
*/ 
private $prenom; 


/** 
* @var \DateTime 
* 
* @ORM\Column(name="date_naissance", type="date", nullable=true) 
*/ 
private $dateNaissance; 



/** 
* @var string 
* 
* @ORM\Column(name="url_photo", type="string", length=100, nullable=true) 
*/ 
private $urlPhoto; 



/** 
* @var integer 
* 
* @ORM\Column(name="id_utilisateur", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $idUtilisateur; 

/** 
* @var \Site\UserBundle\Entity\Sexes 
* 
* @ORM\ManyToOne(targetEntity="Site\UserBundle\Entity\Sexes") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="id_sexe", referencedColumnName="id_sexe") 
* }) 
*/ 
private $idSexe; 



/** 
* @var \Site\UserBundle\Entity\Niveaux 
* 
* @ORM\ManyToOne(targetEntity="Site\UserBundle\Entity\Niveaux") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="id_niveau", referencedColumnName="id_niveau") 
* }) 
*/ 
private $idNiveau;` 

ご覧のとおり、私はすでにこのエンティティのIDである "id_utilisateur"フィールドを持っています。私は、ログインしようとするも、ここで私が取得エラーのスクリーンショットがあるThe XML Code

: そして、ここでは、XML内のエンティティ情報のコードで、私は問題だと思うThe Error

答えて

0

された大会IDごとフィールドはしばしばちょうどidと呼ばれ、いくつかの場所でFOS UserBundleはそれを正確に期待しています。 UserProvider

これを回避する方法はいくつかあります。たとえば、自分のフィールドにidを代入する独自のUserProvder(参照としてリンクされているものを使用)を書くことができます。他の場所でもこれを行う必要があります。あなたが使用するエンティティに

<id name="id" column="id_utilisateur" type="integer"> 
    <generator strategy="IDENTITY" /> 
</id> 

この方法:XMLで同様

/** 
* @var integer 
* 
* @ORM\Column(name="id_utilisateur", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $id; 

public function getId() { return $this->id; } 

これは次のようになります。

簡単に解決策は、ちょうどこのような何かにあなたのエンティティを変更することであろう予想されるプロパティとアクセサメソッドがありますが、バックグラウンドではデータベースフィールドid_utilisateurにマップされるため、データベースを変更する必要はありません。

これは既にあなたの問題を解決するはずです。新しいユーザーが生成されると、Doctrineは$user->getId()というマップを自動的にuser_table.id_utilisateurに持って行きます。既存のコードで古いget-methodを使用している場合は、そのまま使用してください。

/** 
* @deprecated Use getId() instead. 
*/ 
public function getIdUtilisateur() 
{ 
    return $this->getId(); 
} 
+0

ありがとうございました。 –

関連する問題