2011-01-27 16 views
0

ねえ。 私は方法としてポストを持つログインフォームを持っています。アクションは 'auth/login'に行き、ユーザーが存在するかどうかデータベースをチェックします。ユーザーが存在する場合は$this->getUser->setAuthenticated(true);と呼びます。この後、成功すればウェルカムページにリダイレクトしたい。symfonyでコントローラからビューに変数を渡すより良い方法

ログインに失敗した場合は、もちろんそのようにユーザーに伝えたいと思います。しかし、コントローラの設定変数は、ログインが失敗した場合にのみ表示され、それぞれの変数が設定されているかどうかがチェックされます。

これは、コントローラからビューセットで使用したいほとんどすべての変数をチェックする必要があることを意味します。それが設定されていない場合、私は先に進み、それをエコーし​​ます。私はsymfonyからエラーを受け取り、生産段階モードは500 internal server error以外の何も表示しません。

おかげ

EDIT:

これが私の現在の、新しい、よりよい解決策です。まだ返済を探しています。

で/テンプレート/ LOGINSUCCESS

if ($sf_params->has('bad_login')) { echo "Wrong username or password"; }

そして、私のコントローラで:

 
$this->redirect('auth/login?bad_login='); 

答えて

1

はにsfDoctrineGuardPlugin(認証のための事実上の標準)がそれをしない方法を見てみましょう:彼らはsfGuardValidatorUserを作成し、ポストバリデータとしてそれを使用しますsignin form

この方法の利点:ユーザー名とパスワードの検証がフォームで処理されるので、そのコードをアクションに入れる必要はありません。単純な$form->isValid() { $this->redirect("@homepage"); }に単純化しています。

0

あなたは検証の世話をするためにsymfonyのフォームを使用することができますように思えます。フォームが内蔵エラーを示しているので、フォームの検証にこれを置くことができ、その後、あなたのコントローラのようなものになります。

$form = new LoginForm; 
if ($request->isMethod('post')) 
{ 
    if ($form->isValid()) 
    { 
    $this->redirect('account'); 
    } 
    else 
    { 
    // this would show the form, and since you put the login in the form validation it will show errors. You could have the username show the error 
    } 
} 

はあなたががやっていることを行うために、私はこれをお勧めします。そうすれば、ビュー内のどのパラメータにもアクセスすることはありません。

コントローラー:

$this->bad_login = $this->getParameter('bad_login',false); 

ビュー:

if ($bad_login) { echo 'bad login'; } 
0
  1. 使用forward()
  2. コントローラの別の方法にビュー人口に必要なすべてのロジックを入れて、両方の場所でそれを呼び出します。
  3. 使用cgratignyのソリューション - シングルアクションでのログインフォームと処理コードを入れて、isMethod('post') && $login_success
場合はページを歓迎するためにリダイレクト
関連する問題