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。为什么不显示错误摘要?
感谢您的关注
答案 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。