2011-10-28 3 views
4

FOSUserBundleは、私が取り組んでいるプロジェクトに適しています。しかし、FOSFacebookBundleを埋め込み、FOSUserBundleと動作させるようにしています。FOSUserBundleとFOSFacebookBundle:userManager-> updateUser(): "不明なエラー"(これは教義のエラーです)

この目的の中で、私はUserBundleを提供するものに加えて、Facebookのから保存したいのですが、いくつかのフィールドを追加するAcme\MyBundle\Entity\User.php自分自身を構築しました。このクラスの コードはデバッグされ、動作しています(まあ、それは私が思ったことです!下記参照)。動作しません何

がある(loadUserByUsernameの内側に、私のAcme\MyBundle\Security\User\Provider\FacebookProvider.phpに())この行:

 $this->userManager->updateUser($user); 

Acme\MyBundle\Security\User\Provider\FacebookProvider.phpは、ドキュメントと同じである(read it here

実行の直前のprint_r($user);の出力は、$this->userManager->updateUser($user);の要素です。

 
Acme\MyBundle\Entity\User Object 
(
    [id:protected] => 
    [facebookID:protected] => 847000001 
    [first_name:protected] => Peter 
    [middle_name:protected] => 
    [last_name:protected] => Parker 
    [fullname:protected] => Peter Parker 
    [locale:protected] => en_US 
    [timezone:protected] => 2 
    [updated_time:protected] => 2011-10-27T17:13:24+0000 
    [birthday:protected] => DateTime Object 
     (
      [date] => 1961-07-01 10:31:53 
      [timezone_type] => 3 
      [timezone] => Europe/Berlin 
     ) 
    [languages:protected] => Doctrine\Common\Collections\ArrayCollection Object 
     (
     [_elements:Doctrine\Common\Collections\ArrayCollection:private] => Array 
      (
     [0] => Acme\MyBundle\Entity\SpokenLanguage Object 
      (
      [facebookID:Acme\MyBundle\Entity\SpokenLanguage:private] => 113051505375958 
      [name:Acme\MyBundle\Entity\SpokenLanguage:private] => Italien 
      ) 
     [1] => Acme\MyBundle\Entity\SpokenLanguage Object 
      (
      [facebookID:Acme\MyBundle\Entity\SpokenLanguage:private] => 112264595467201 
      [name:Acme\MyBundle\Entity\SpokenLanguage:private] => Français 
      ) 
     [2] => Acme\MyBundle\Entity\SpokenLanguage Object 
      (
      [facebookID:Acme\MyBundle\Entity\SpokenLanguage:private] => 103803232991647 
      [name:Acme\MyBundle\Entity\SpokenLanguage:private] => English 
      ) 
     ) 
    ) 
    [usernameFB:protected] => spiderman 
    [username:protected] => Peter Parker 
    [usernameCanonical:protected] => 
    [email:protected] => [email protected] 
    [emailCanonical:protected] => 
    [enabled:protected] => 1 
    [algorithm:protected] => 
    [salt:protected] => 
    [password:protected] => 
    [plainPassword:protected] => 
    [lastLogin:protected] => 
    [confirmationToken:protected] => 540grdgfg343004g8g0skg0wg408k 
    [passwordRequestedAt:protected] => 
    [groups:protected] => 
    [locked:protected] => 
    [expired:protected] => 
    [expiresAt:protected] => 
    [roles:protected] => Array 
     (
      [0] => ROLE_FACEBOOK 
     ) 

    [credentialsExpired:protected] => 
    [credentialsExpireAt:protected] => 
) 

メッセージエラーが"UNKNOWN ERROR"です。だから私は、このメッセージがバンドルでどこに送られるか見てみることにしました。そして、私はそれが例外に設定されていることがわかりました。私は例外メッセージを出力することに決めました。新しいエンティティが カスケードに構成されたエンティティの操作を持続していなかった 「アクメ\ MyBundle \エンティティ\ユーザ#言語は」関係を通じて発見された

:だから、例外メッセージ以下

アクメ\ MyBundle \ Entity \ SpokenLanguage @ 000000004a9e2dfa0000000001482b74です。 新しいエンティティを明示的に永続化するか、カスケード永続化のコンフィグレーションを関係上の 操作に設定します。どのエンティティ が原因で問題が発生しているのかわからない場合は、 'Acme \ MyBundle \ Entity \ SpokenLanguage #__ toString()'の手がかりを得てください。

私はUserクラスのDoctrine Annotationsをうまくコーディングしていないと思うので、問題はManyToMany()関連マッピングです。ここで

Acme\MyBundle\Entity\User.phpのフィールド$言語の注釈:

/** 
* @var \Doctrine\Common\Collections\ArrayCollection 
* @ORM\ManyToMany(targetEntity="SpokenLanguage") 
* @ORM\JoinTable(name="users_spokenlanguage", 
*  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="spokenlanguage_id", referencedColumnName="facebookID")} 
*  ) 
*/ 
protected $languages; 

あなたたちは問題を解決するためにどのように心の中で何かを持っていますか? 私はCASCADINGの問題について考えています。

ありがとうございます。

+0

OKAY!これを解決しました...最後に、パラメータ 'cascade = {'persist'、 'remove'、 'merge'}'をAnnotation ManyToManyに追加する必要があります。 '@ORM \ ManyToMany(targetEntity =" SpokenLanguage "、cascade = {" persist "、" remove "、" merge "})' – ohFRY

+0

あなたのコメントを回答として投稿して受け入れてください;) –

答えて

2

OKAY!私はこれを最後に解決しました!

パラメータcascade={'persist','remove','merge'}をAnnotation ManyToManyに追加する必要があります。このよう

@ORM\ManyToMany(targetEntity="SpokenLanguage", cascade={"persist", "remove", "merge"})