0

これがどのように機能するかを理解するために、ここで助けが必要です。sfDoctrineGuardPlugin次のようにプロファイルテーブルを使用して追加することを参照してください。

SfGuardUserProfile:
  connection: doctrine
  tableName: sf_guard_user_profile
  columns:
    id: { type: integer(8), primary: true }
    user_id: { type: integer(8), primary: false }
    idempresa: { type: integer(4), primary: false }
  relations:
    User:
      local: user_id
      class: sfGuardUser
      type: one
      foreignType: one
      foreignAlias: SfGuardUserProfile
      onDelete: CASCADE
      onUpdate: CASCADE

次に、ログインしたユーザーに基づいてフィールド値を設定する必要があります。SdrivingEmisorFormそのためには、にアクセスする必要がありますが、idempresa方法sf_guard_user_profileがわかりません:-(私はこれをすべて試しました:

$user = sfContext::getInstance()->getUser();

echo $user->getGuardUser()->getProfile()->getIdempresa();
echo $this->getUser()->getGuardUser()->getProfile()->getIdempresa();
echo $user->getProfile()->getIdempresa();

私のスキーマ定義に基づいてプロファイルフィールドにアクセスする正しい方法はどれですか? いつか状況が変わった場合に同じ疑いを抱かないようにするために、これをどのように理解する必要があるかを簡単に説明してもらえますか?

EDIT 私は解決策を見つけましたが、sfContext::getInstance()多くの人が間違っていると言っているので、この場合、これを行う正しい方法は何ですか. 以下のコードは私のために機能します:

$user = sfContext::getInstance()->getUser()->getGuardUser()->getSfGuardUserProfile()->getIdempresa();

PS:私はSdrivingEmisorFormクラスからアクセスしています

4

1 に答える 1

1

ForeignAlias を SfGuardUserProfile として定義しているため、ゲッターにはこの名前を使用する必要があります。いくつかのアクションで:

$profile = $this->getUser()->getGuardUser()->getSfGuardUserProfile();

いくつかのテンプレートで:

$profile = $sf_user->getGuardUser()->getSfGuardUserProfile();

それで:

echo $profile->getIdempresa();
于 2013-06-10T16:45:55.030 に答える