LoginSignup
3
0

More than 1 year has passed since last update.

【EC-CUBE】ログアウトするとNotFoundHttpExceptionがでる

Posted at

概要

EC-CUBEで/logoutのパスにアクセスするとNotFoundHttpExceptionが発生します。

原因:

UserDataControllerに下記のようなRoutingを設定していたためです。

    /**
     * @Route("/{route}", name="user_data", requirements={"route": "([0-9a-zA-Z_\-]+\/?)+(?<!\/)"}, methods={"GET"})
     */
    public function index(Request $request, $route)
~~~

カスタムページのuser_data/{ページ名}からuser_dataを消すためにこのようなルーティングを設定しましたが、結果として/logoutもキャッチしてしまい、エラーが発生するようになってしまいました。

解決策:

priority を使用して、ルーティングの優先度を下げることで解決できます。具体的には、ルーティングアノテーションの中にpriority=-1を追加します。

    /**
     * @Route("/{route}", name="user_data", requirements={"route": "([0-9a-zA-Z_\-]+\/?)+(?<!\/)"}, methods={"GET"}, priority=-1)
     */
    public function index(Request $request, $route)

他の解決策:

他にも/logoutのアクションを独自で定義して、カスタムページのルーティングよりも優先順位を高くする方法もありますが、ログアウトを再実装する際には、セッションの破棄や認証の解除など、セキュリティ上の重要な処理を実装することになるため、注意が必要です。

まとめ

Symfonyのルーティングに関する勉強をしていて、priority の存在を知っていたため、このような解決方法を思いつきました。今後も、SymfonyやPHPの勉強を進め、実務で役立てていきたいと思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0