0

ユーザーがアプリケーション内で実行する特定の要求を追跡するために、Symfony でフィルターを開発しています。現在のユーザーを取得するには、次のgetContext()メソッドを使用します。

$user = $this->getContext()->getUser();

そして、そのプロパティにアクセスしようとします:

...
$username = $user->getUsername();
...

問題は、Symfony が次の例外を発生させることです: Call to a member function getUsername() on a non-object in ... sfGuardSecurityUser.class.php、この方法でユーザーを取得しない限り:

$user = $this->getContext()->getUser()->getGuardUser();

sfDoctrineGuardUser のドキュメント(およびソース コード) によると、次のようなプロキシ メソッドがあります。

public function getUsername()
{
    return $this->getGuardUser()->getUsername();
}

プロキシ メソッドが機能しないのはなぜですか?

アップデート

数週間の開発の後、問題が再び発生しました。今回は$sf_user変数を使ったビューから。でIDを取得できます

$sf_user->getGuardUser()->getId()

しかし、一緒ではありません

$sf_user->getId()

以下の私自身の答えは説明です。

4

4 に答える 4

1

nullを返すようです$this->getGuardUser()。理由を調べる必要があります。

于 2011-03-04T14:09:51.983 に答える
0

私が持っている sfGuardSecurityUser.class.php のバージョンにバグが見つかりました。202行目を見て、これを変更してください...これにより、IFステートメントが起動せず、必要なときにユーザーが返されませんでした。

if (!$this->user && $id = $this->getAttribute('user_id', null, 'sfGuardSecurityUser'))
{

$id = $this->getAttribute('user_id', null, 'sfGuardSecurityUser');
if (!$this->user)
{
于 2012-06-22T18:12:10.383 に答える
0

@Matt Gibson のコメントのおかげで、sfDoctrineGuardPlugin のインストール プロセスを確認しました。どこかでタイプミスをしたようです。

$this->getGuardUser()->getUsername()

$this->getUsername()

ただし、メソッドが不足しているため、これらのプロキシ メソッドは改善される可能性があると思いますgetId。長い形式を使用して取得する必要がある ID を除いて、ほとんどすべてを取得できます。

$this->getGuardUser()->getId()
于 2011-04-13T07:45:12.787 に答える
0

プロキシ メソッドを User クラスに追加するだけで、それほど多くはありません。

class myUser extends sfGuardSecurityUser
{
  public function getId()
  {
    return $this->getGuardUser()->getId();
  }
  public function getUsername()
  {
    return $this->getGuardUser()->getUsername();
  }
}

または、魔法が好きなら、仮想 __call() メソッドを定義して、未定義のすべてのメソッドを親クラスにリダイレクトできます。

于 2011-04-13T11:02:33.190 に答える