1

sfDoctrineGuardPlugin によって処理されるサインイン プロセス中にユーザー カルチャをどのように設定しますか? 各ユーザーは、sfGuardUserProfile テーブルに保存されている優先言語を設定できます。

もともと私は、次のようなことをして関数をオーバーライドすることを考えていexecuteSignin()ました:

public function executeSignin(sfWebRequest $request)
{
  $this->getUser()->setCulture($this->getUser()->getGuardUser()->getProfile()->getLanguage());
  parent::executeSignin($request);
}

しかし、親関数が実行される前に GuardUser オブジェクトにアクセスできないため、明らかにそれはできません。

postExectute()次に、次のような関数を作成することを考えました。

public function postExecute()
{
  if($this->getUser()->isAuthenticated()){
    //SET USER CULTURE
  }
}

ただし、サインイン機能がリダイレクトを実行するため、これは機能しませpostExecute()ん。実行されることはありません。

ユーザーが常に同じページや同じモジュールにリダイレクトされるとは限らないため、ログイン後に既定のページにカルチャを設定するロジックを配置できません。

4

3 に答える 3

2

アクションを再作成するよりも簡単なことに進みます。

/apps/[your app]/lib/user/myUser.class.php拡張するファイル内sfGuardSecurityUser

signIn次のように関数をオーバーライドできます。

public function signIn($user, $remember = false, $con = null)
{
  parent::signin($user, $remember, $con);

  $this->setCulture($user->getProfile()->getLanguage());
}

したがって、ユーザーがログインするたびに、カルチャが設定されます。

于 2013-02-27T08:24:07.077 に答える
1

あなたの最初の推測は正しいアプローチです。変更が必要です ;)

親を呼び出す代わりにexecuteSignin()、独自のサインイン アクションを記述します (たとえば、プラグインで使用されるものをコピーします)。次に、必要な行を追加します

$this->getUser()->setCulture($this->getUser()->getGuardUser()->getProfile()->getLanguage());

リダイレクトが行われる直前 - ユーザー セッションに既にプロファイルが割り当てられている場合。

settings.ymlsfDoctrineGuard が新しいアクションを使用するように設定を変更できます。

all:
  .settings:
    login_module:          myCleverModule
    login_action:          signinMyUser

にフォルダーをapp/appName/modules/sfGuardAuth/actions作成し、そこに を作成して、関数をこのファイルにactions.class.php入れることもできます。executeSignin()プラグインのオリジナルを自動的に上書きします。

于 2013-02-27T08:13:13.503 に答える
0

認証前に sfGuardUser オブジェクトへのアクセス権がありません。これは、必要なアクションインスタンスから sfUser にアクセスできないという意味ではありません。

ラインはありますか

$this->getUser()->isAuthenticated()

呼び出すときにユーザーが必ずしも認証されているとは限らないことを示唆していません。

したがって、その行が文化を設定しない場合は、別の場所を探してください。前の行をオーバーライドする可能性のある形式でリクエストにカルチャが存在するかどうかを確認することから始めます。それらを交換してみてください。

Symfony では、sfUser は、ユーザーではなくユーザーがサインインする前に開始される PHP セッションを表します。sfUser::setAttribute を介してセッション データを操作しようとすると、それが機能するはずです。

于 2013-02-26T23:36:24.697 に答える