2012-02-24 9 views
1

ここでは、Yii noob。レイアウトでログインフォームYII

私は部分的にレンダリングされるドロップダウンログインフォームを作成しました。ユーザーの資格情報が正しいときにうまく動作し、どこにでもリダイレクトされます。しかし、フォームの検証や認証に失敗すると、エラーメッセージがログインフォームに渡されることはありません。私は問題は、私のログインフォームがメインレイアウトにあることだと思います。なぜなら、いつでもアクセス可能にしたいからです。そして、コントローラはレイアウトにきれいな変数を渡すことができません。

は、だからここSiteController

public function actionLogin() 
     {      
       $form = new LoginForm; 
       if (isset($_POST['LoginForm'])) 
       { 
         $form->attributes=$_POST['LoginForm']; 

         //validate user input and redirect to user panel if valid 
         if($form->validate() && $form ->login()) 
         { 
           $success = "oui"; 
           $this->render('user_panel');  
         } 
         else 
         {            
           $success = $form->getError('login').$form->getError('password');               
           $this->render('index',array('success'=>$success)); 
           //here I can pass the error messages to the index view for example, but not to the login form in the main layout, how can I do this? 
         }                          
       }      
     } 

の私のログインアクションはまた、ログインフォームで、私はその仕事をするか、trueにenableAjaxValidationに設定されていますか?コントローラにAjaxを介してフォームに直接応答することもできますか?

最後の質問:フォームは$ form-> errorSummary($ model)&というモデルを新しいLoginFormにエコーする必要があります。なぜそれはエラーサマリーを表示しないのですか?あなたの注意

答えて

1

このため

ありがとう:

$success = $form->getError('login').$form->getError('password');               
$this->render('index',array('success'=>$success)); 

は次のようになります。

$this->render('login',array('model'=>$model)); 

フォームが

<?php echo $form->error($model,'field'); ?> 

または

のようないくつかのラインを持っている必要があります
<?php echo $form->errorSummary($model); ?> 

これらの行は、バリデータからエラーを受け取り、表示するので、エラーが発生しても何も渡す必要はありません。

最後に、ベストプラクティスのために、命名規則で分析にエラーが発生します。エラーの変数は実際には$成功と呼ばれます。

+0

私は、ログインフォームがレイア​​ウトにあると言っていたので、エラーを渡すことはこのように動作していないようです。実際に 'index'をレンダリングする代わりに、ユーザーがログインしたビューをすべてレンダリングする必要があります。 – Arthur

+0

$ modelは新しいLoginForm権限になっていますか? – Arthur

関連する問題