2014-06-13 25 views
2

我建設有phalconphp一個登錄頁面,當我在按鈕上的標誌點擊帶有或不帶有任何輸入這個錯誤表明:我做了什麼錯在這裏與此SigninController

爾康\的mvc \調度\例外: handler'signin' 上找不到處理'signin'行爲'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 \ learning-phalcon \ public \ index .PHP(9 7): 爾康\的mvc \應用程序 - >手柄()#3 {}主要

這裏主要的一點是,我不明白爲什麼我需要有一個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

'處理程序'signin''上未找到'操作'登錄'。既然你在其他地方大寫'Signin',或許你在多個地方使用的''signin''也應該改成'Signin'? – JakeGould

+0

會是這樣嗎?因爲我想我的{{url('signin/doSignin')}}沒有正確連接到控制器。編輯:我改變了案件後,仍然不能。 – Blkc

+0

我不知道。一條建議。 – JakeGould

回答

3

下面是可能出現的問題的列表,並在代碼中的一些建議,您已經發布:

1)我建議將您的「基本控制器」命名爲ControllerBase,這不僅是因爲Phalcon conventions,但也可以訪問您的「/ base」路徑。

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

請考慮至少前兩項,然後給我一些反饋,如果你的問題沒有解決。

+0

感謝您的建議,我一定會檢查出來。 – Blkc

相關問題