我正在使用phalconphp构建一个登录页面,当我点击登录按钮时有或没有任何输入,此错误显示:
Phalcon \ Mvc \ Dispatcher \ Exception:Action' signin'没找到 处理程序'登录' File = C:\ xampp \ htdocs \ learning-phalcon \ public \ index.php Line = 97#0 [内部功能]: Phalcon \ Mvc \ Dispatcher-> _throwDispatchException(' Action' signin' ...', 5)#1 [内部功能]:Phalcon \ Dispatcher-> dispatch()#2 C:\ XAMPP \ htdocs中\学习,尔康\公用\的index.php(97): Phalcon \ Mvc \ Application-> handle()#3 {main}
这里的要点是,当我没有在我的代码中调用该操作时,我不明白为什么我需要有一个signinAction。谁能告诉我我做错了什么?
这是我的SigninController:
<?php
use \Phalcon\Tag;
class SigninController extends BaseController
{
public function onConstruct()
{
parent::initialize();
}
private function _createUserSession(User $user)
{
$this->session->set('id', $user->id);
$this->session->set('role', $user->role);
$this->response->redirect("dashboard/index");
}
public function indexAction()
{
Tag::setTitle('Signin');
$this->assets->collection('additional')->addCss('css/signin.css');
}
public function doSigninAction()
{
if ($this->security->checkToken() == false) {
$this->flash->error('Invalid CSRF Token');
$this->response->redirect("signin/index");
return;
}
$this->view->disable();
$email = $this->request->getPost('email');
$password = $this->request->getPost('password');
$user = User::findFirstByEmail($email);
if ($user)
{
if ($this->security->checkHash($password, $user->password))
{
$this->_createUserSession($user);
return;
}
}
$this->flash->error('Incorrect Credentials');
$this->response->redirect("signin/index");
}
}
这是我的登录索引页面:
{% block content %}
<form class="form-signin" method="post" action="{{ url('signin/doSignin') }}">
<h2 class="form-signin-heading">Please sign in</h2>
<input type="text" name="email" class="form-control" placeholder="Email address" autofocus>
<input type="password" name="password" class="form-control" placeholder="Password">
<input class="btn btn-lg btn-primary btn-block" type="submit" value="Sign in">
<input type="hidden" name="{{ security.getTokenKey() }}" value="{{ security.getToken() }}" />
</form>
{% endblock %}
答案 0 :(得分:3)
此处列出了可能出现的问题以及您发布的代码的一些建议:
1)我建议您命名您的基本控制器&#34;作为ControllerBase
,不仅因为Phalcon conventions而且还可以访问您的&#34; / base&#34;路径。
2)我担心这个障碍:
public function onConstruct()
{
parent::initialize();
}
请参阅this question了解原因。
3)您在重定向中使用直接闪存:
$this->flash->error('Invalid CSRF Token');
$this->response->redirect("signin/index");
对于重定向,请使用flashSession
,除非您打算将请求转发给其他控制器。有关此 here 的更多信息。
4)只是另一个建议。这很罕见,但在URI中使用大写字符可以会导致一些问题(主要是人为错误)。一般建议只将区分大小写的部分留给查询字符串,但由您决定。使用Phalcon,您可以在动作名称中使用破折号,以便稍后将其转换为驼峰式案例(就像Phalcon已经为控制器名称所做的那样)。如果您选择接受此推荐,请more info about it。
请至少考虑前两项,如果您的问题没有解决,请给我一些反馈。