我在这个SigninController上做错了什么

时间:2014-06-13 18:21:56

标签: php phalcon

我正在使用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 %}

1 个答案:

答案 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

请至少考虑前两项,如果您的问题没有解决,请给我一些反馈。