在布局YII中登录表单

时间:2012-02-24 10:56:03

标签: php forms yii

Yii noob在这里。

我制作了一个下拉登录表单,该表单呈现为部分。当用户凭据正确无误时,它可以正常工作并重定向到我想要的任何地方。但是,如果表单验证或身份验证失败,我无法将错误消息传递给登录表单。我认为问题是我的登录表单是在主布局中(因为我希望它随时可以访问)并且控制器无法以干净的方式将变量传递给布局。

所以这是我在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?
                        }                                                                                                       
                }                       
        }

另外,在登录表单中,我将enableAjaxValidation设置为true,这是如何工作的?我可以说控制器也可以通过Ajax直接响应表单吗?

最后一个问题:表单应该回显$ form-> errorSummary($ model)& model是新的LoginForm。为什么不显示错误摘要?

感谢您的关注

1 个答案:

答案 0 :(得分: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); ?>

这些行将从验证器接收错误并显示它们,因此您在发生错误时无需传递任何内容。

最后,为了最佳实践,您的命名约定会导致分析错误,您的错误变量实际上称为$ success。