嘿。
我有一个以post作为方法的登录表单。该操作转到“auth / login”,如果用户存在,将检查数据库。如果用户存在,我会调用 $this->getUser->setAuthenticated(true);
。在此之后,如果成功,我想重定向到欢迎页面。
如果登录失败,我当然希望在视图中告诉用户。但是只有在登录失败的情况下控制器中的设置变量,并且在视图中检查是否设置了每个变量,是否有很多工作要做?
这意味着我必须在控制器的视图集中检查我想要使用的几乎所有变量。如果它应该发生,它没有设置,我只是继续并回应它,我从symfony得到一个错误,生产stage-mode-ish除了 500 internal server error
之外不显示任何内容。
由于
编辑:
这是我目前的新的更好的解决方案。还在寻找反馈。
> / templates / loginSuccess if ($sf_params->has('bad_login')) {
echo "Wrong username or password";
}
在我的控制器中:
$this->redirect('auth/login?bad_login=');
答案 0 :(得分:1)
看看sfDoctrineGuardPlugin(事实上的身份验证标准)是如何做到的:他们创建了sfGuardValidatorUser并将其用作signin form中的帖子验证器。
此方法的优点:表单负责用户名/密码验证,您无需将该代码放入您的操作中。它将其简化为简单的$form->isValid() { $this->redirect("@homepage"); }
。
答案 1 :(得分: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'; }
答案 2 :(得分:0)
forward()
isMethod('post') && $login_success