2013-06-12 292 views
2

這是一個常見的問題,有很多提示,但我目前無法解決它。也許有人可以幫助我。無法找到路徑「/ login_check」的控制器 - 沒有找到匹配的控制器

我security.yml:

firewalls: 
    login: 
     pattern: ^/login$ 
     anonymous: ~ 

    secured_area: 
     pattern: ^/ 
     form_login: 
      login_path: /login 
      check_path: /login_check 
     logout: 
      path: /logout 
      target:/

access_control: 
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/, roles: ROLE_USER } 

而這些是我的配置的路由(路由器:調試輸出):

home      ANY ANY ANY/
login     ANY ANY ANY /login 
logout     ANY ANY ANY /logout 
login_check    ANY ANY ANY /login_check 

我想有一個安全區域的一切。但是我仍然收到上面提到的錯誤:無法找到路徑「/ login_check」的控制器。我的配置有什麼問題?

+0

註釋登錄防火牆線路以及訪問控制線路。把匿名:〜在secured_area下:看看會發生什麼。一旦你得到它的工作,那麼你可以添加訪問控制。我認爲你根本不需要登錄防火牆。您應該爲所有路徑製作命名路線。認爲它在S2.3中是必需的。但是login_check不應該指向一個控制器。 form_login監聽器攔截它。 – Cerad

回答

0

這很瘋狂。 Symfony沒有錯誤。我在前端使用Jquerymobile 1.3.1,每次登錄後瀏覽器中的url指向http://myapp.localhost/app_dev.php/login_check。登錄後我得到了正確的內容,但是在查看源代碼時,我看到錯誤:無法找到路徑「/ login_check」的控制器。當我使用瀏覽器刷新按鈕時,我會看到經典的symfony 2故障站點。

當我刪除所有jquerymobile js和css時,登錄系統按預期工作。也許我需要將登錄表單從郵件更改爲某種ajax提交。

1

在您的security.yml中,您可以通過uri或路由名稱來定義check_path。請路線名稱,比如嘗試,

secured_area: 
     pattern: ^/ 
     form_login: 
      login_path: /login 
      check_path: login_check 
     logout: 
      path: /logout 
      target:/

OR 您可以創建自定義的安全檢查路徑securityController這樣,

/** 
* @Route("/login_check", name="_security_check") 
*/ 
public function securityCheckAction() 
{ 

} 

的你可以在安全配置文件中定義check_path: _security_check

+0

感謝您的回覆。第一個沒有工作,我得到一個空白頁。第二個解決方案部分工作,我現在得到「控制器必須返回一個響應(null給出)。你忘了在控制器的某處添加return語句嗎?(500內部服務器錯誤)」...我知道我可以修復這與'返回新的響應(「」);'但我想,我不需要實現這樣的控制器?登錄後,我不會重定向到「/」,我仍然保持「/ login_check」。 – Stefan

+0

Symfony標準包有一個完美的演示,請檢查src/Acme/DemoBundle/Controller/SecuredController.php – Nisam

+0

plus for remove/in login_check –