2017-04-14 30 views
1

私はsymfonyを初めて使いました。私はセキュリティとユーザ管理についてのチュートリアルに従っていますが、私のルーティングから来ているような問題に悩まされています。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 

私は」 .ymlファイルは非常に敏感で、通常の字下げの代わりに4つのスペースが必要であることを認識しているので、私はtを書き換えましたスペースごとに行単位でファイルを作成しますが、まだ動作していません。

誰かが私を助けてくれることを願っています:p いくつかの情報が必要な場合は、躊躇しないでください!

編集:私はちょうど私のsecurity.ymlでdefault_target_pathを追加しなければならなかった私の問題を取り除くために:ここでphp bin/console debug:router php bin/console debug:router

編集2の私の結果である

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 /(トピックから外れる:yamlは4つのスペースを必要とせず、一貫性を保つ必要があることを意味する)。 – Cerad

+0

1番目は、プロジェクトの/ webディレクトリを指す仮想ホストを作成することです。 /ルートは機能しますか?http://dev-05/ANTOINE/Symfony/web/app_dev.php – COil

+0

私の投稿を編集したので、私のフォームを見ることができます。それは私にとっては大丈夫です。ルートに関して、私が/web/app_dev.phpに行こうとするとうまくいきませんが、最後に "/"を付けるとうまくいきます。問題はここから来ていると思いますか? – AKM

答えて

1

リフレッシュあなたキャッシュ、コンソールコマンド:php bin/console cache:clear、古いsymfonyを使用している場合、bin/consoleではなくapp/consoleです。次のコマンドでルートをデバッグすることができます:php bin/console debug:router。これはメインのシステムコンソールで、私の場合はWindows上で使用します。あなたは彼らが働くためにプロジェクトフォルダにいなければなりません。

"/"にリダイレクトされているかどうかわかりませんが、最近Symfonyで作業を開始しました。ほとんどの問題は、キャッシュや間違ったymlやルート名で発生しました。しかし、あなたの場合、symfonyがログインに成功するためにsymfonyが行くかもしれませんが、default_target_path: your_homepage_route_name or /where_you_want_to_go を追加すると、ここで問題になるかもしれません。

新しいものであるため、ルートを含めてプレフィックスを定義すると、設定していることを簡単に忘れることができます。そのため、すべての情報を非常に簡単に見ることができるため、ルータのデバッグはすばらしいです。 symfonyで作業しているときにコンソールが組み込まれたediorで作業していないと、常にコンソールウィンドウが開きます。私はジェットビーンズはそれを持っていると思う、それらのチュートリアルはすべてそれで行われます。 PS、symfony用のYouTubeチュートリアルは素晴らしいです、例えばSymfonyとPHPプログラミングチャンネルには初心者向けのチュートリアルがあります。

+0

私はすでにキャッシュをリフレッシュしました。私はもう一度やりました。私は元のポストに 'php bin/console debug:router'の結果を追加しています。私はそれを見ると、すべてが普通のようです。 – AKM

+0

Mhm、面白いです。あなたはデフォルトのターゲットパスを設定しようとしましたか、私はその情報を使って自分の投稿を編集しました。エディタで行った変更を保存することを忘れないで、前にその道をたどりました:) –

+0

OK、私symfony [link](http://symfony.com/doc/current/security/form_login.html)のドキュメントを読んでください。デフォルトのターゲットパスを定義していないので、ログインが成功すると常にリダイレクトされるようです/ loginであるリクエストされたルートにあなたをリダイレクトしようとしています。そこに既にそこに行きたがっている/それはスケルトンアプリケーション自体で定義されていますが、デフォルトのAppBundleコントローラを削除したかもしれません。 –