2017-04-14 238 views
1

我是新來的Symfony,我跟着一個教程,安全和用戶管理的一部分,但我stucked與似乎來自我的路由問題。Symfony的:問題與路由

我只是創建了實際工作,當我去上/app_dev.php/login登錄表單,表單顯示出來,我可以填滿它,但是當我提出它,我得到了以下錯誤:

No route found for "GET /" (from "http://dev-05/ANTOINE/Symfony/web/app_dev.php/login") 
404 Not Found - NotFoundHttpException 
1 linked Exception: 
ResourceNotFoundException » 

得到這個錯誤後,如果我回到主頁,我可以看到我已連接,所以它正在工作,但重定向不是。

根據文檔,這來自於可能被錯誤配置的路由,但我不知道我犯了一個錯誤。

這是我的形式,我的security.yml和我的routing.yml文件:

{% extends "AKMUserBundle::layout.html.twig" %} 

{% block akmuser_body %} 

{% if error %} 
    <div class="alert alert-danger">{{ error.message }}</div> 
{% endif %} 

<form action="{{ path('login_check') }}" method="post"> 
    <label for="username">Login : </label> 
    <input type="text" id="username" name="_username" value="{{ last_username }}" /> 

    <label for="password">Mot de passe :</label> 
    <input type="password" id="password" name="_password" /> 
    <br /> 
    <input type="submit" value="Connexion" /> 
</form> 

{% endblock %} 

security.yml:

security: 
    encoders: 
     Symfony\Component\Security\Core\User\User: plaintext 

    role_hierarchy: 
     ROLE_ADMIN: ROLE_USER 
     ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 

    providers: 
     in_memory: 
      memory: 
       users: 
        user: { password: userpass, roles: ['ROLE_USER'] } 
        admin: { password: adminpass, roles: ['ROLE_ADMIN'] } 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 
     main: 
      pattern: ^/ 
      anonymous: true 
      form_login: 
       login_path: login 
       check_path: login_check 
      logout: 
       path: logout 
       target: /platform 

的routing.yml:

akm_platform: 
resource: "@AKMPlatformBundle/Resources/config/routing.yml" 
prefix: /platform 

login: 
    path: /login 
    defaults: 
     _controller: AKMUserBundle:Security:login 

login_check: 
    path: /login_check 

logout: 
    path: /logout 

我m知道.yml文件非常敏感,需要4個空格而不是通常的縮進,所以我重寫了t他一行一行地寫着空格,但它仍然不起作用。

我希望有人能幫助我:對 如果你需要一些信息,不要猶豫!

編輯:這是我的php bin/console debug:router php bin/console debug:router

編輯2的結果是:爲了擺脫我的問題我不得不添加default_target_path在我security.yml:

security: 
    encoders: 
     Symfony\Component\Security\Core\User\User: plaintext 

    role_hierarchy: 
     ROLE_ADMIN: ROLE_USER 
     ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 

    providers: 
     in_memory: 
      memory: 
       users: 
        user: { password: userpass, roles: ['ROLE_USER'] } 
        admin: { password: adminpass, roles: ['ROLE_ADMIN'] } 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 
     main: 
      pattern: ^/ 
      anonymous: true 
      form_login: 
       login_path: login 
       check_path: login_check 
       default_target_path: akm_platform_home 
      logout: 
       path: logout 
       target: /platform 
+0

在瀏覽器中查看登錄表單的源極和驗證了該方法的POST和動作是/ login_check。錯誤消息意味着你有GET /(Off topic:yaml不需要4個空格,只需要保持一致)。 – Cerad

+0

1st將創建一個指向項目的/ web目錄的虛擬主機。 /路線是否有效?http://dev-05/ANTOINE/Symfony/web/app_dev.php – COil

+0

我編輯了我的帖子,所以你可以看到我的表格,這對我來說似乎沒問題。關於路由,如果我嘗試去/web/app_dev.php它不起作用,但最後用「/」表示它工作正常,你認爲這個問題來自這裏嗎? – AKM

回答

1

刷新緩存,控制檯命令:php bin/console cache:clear,如果你使用的是舊的symfony,它是app/console而不是bin/console。您可以使用以下命令來調試路由:php bin/console debug:router。這是主要的系統控制檯,在我的情況下,我在Windows上使用它。您必須在項目文件夾中才能使用。

我不知道你在哪裏得到重定向到「/」,我最近開始在Symfony的工作,大部分問題都與清爽的緩存和錯誤的YML和路由名稱。然而,在你的情況下,可能是symfony去路由/成功登錄,你可以添加default_target_path: your_homepage_route_name or /where_you_want_to_go 這可能是什麼問題在這裏。

既然你是新的,當你包括路線和爲它們定義的前綴,你可以很容易忘記你設置它,這就是爲什麼路由器調試是偉大的,因爲你可以看到所有的信息也很容易。在symfony中工作時,如果不在具有內置控制檯的edior中工作,總是會打開控制檯窗口。我認爲JetBeans擁有它,所有這些教程都在其中完成。 PS,symfony的youtube教程非常棒,例如Symfony和PHP Programming channel有一個很好的初學者教程。

+0

我已經刷新緩存,我再次做了,以防萬一,沒有改變任何東西。我在原帖中添加了'php bin/console debug:router'的結果,就像我看到的那樣,一切看起來都很正常 – AKM

+0

姆姆,有趣。你有沒有嘗試過設置默認的目標路徑,我編輯了我的信息,還有,不要忘記保存你在編輯器中所做的任何更改,我一直在這條路上:) –

+0

好的,我閱讀symfony [鏈接](http://symfony.com/doc/current/security/form_login.html)文檔,看起來您總是在成功登錄後重定向,因爲您沒有定義它的默認目標路徑試圖將您重定向到請求的路由,這是/ login,因爲您已經在那裏它可能會嘗試去/哪些是在骨架應用程序本身中定義的,但您可能已更改它或刪除默認的AppBundle控制器。 –