弊社で提供しているプラグインやカスタマイズのControllerが「ページがみつかりません」になるというお問い合わせをいただきますが、
ほとんどの場合が、いくつかのブログで紹介されている新規ページのURLからuser_dataという文字を取り除くカスタマイズをしているためです。
考えられる理由1 ルーティング間違い
そもそもルーティングが存在しないか、間違っていることがあります。
EC-CUBEでは各ページのURLをコントロールするためにルーティングという考え方が用いられています。
ルーティングは@Routeというアノテーションで各Controllerファイルに記載されていますので、プロジェクト内に表示したいURLのルーティングがあるかどうか確認してみてください。
@Route("/hogehoge", name="hogehoge")
考えられる理由2 ルーティングのバッティング
複数のControllerでルーティングがバッティングしてしまって上書きされてしまっていることがあります。
その代表的なものが新規作成ページのURLからuser_dataという文字を取り除くカスタマイズを行なっているケースです。
UserDataControllerのルーティングは初期状態でこうなっています。URLは/user_data/hogehogeです。
@Route("/%eccube_user_data_route%/{route}", name="user_data", requirements={"route": "([0-9a-zA-Z_\-]+\/?)+(?<!\/)"}, methods={"GET"})
これを単純に/hogehogeというURLで表示したいために次のように書き換えているサイトを見かけます。
@Route("/{route}", name="user_data", requirements={"route": "([0-9a-zA-Z_\-]+\/?)+(?<!\/)"}, methods={"GET"})
このカスタマイズを行うと、”/{route}”は全てのURLにマッチするので、バッティングが発生します。
これを解消するにはSymfonyの難しい知識が必要で、EC-CUBEのバージョンによっても変わってくると考えられるので、user_dataを取り除くカスタマイズ自体をおすすめしません。
user_dataを取り除くことはおすすめしません
弊社では下記の記事でもふれている通り、不具合を引き起こしやすい「user_dataを取り除く」カスタマイズはおすすめしません。
問題なく実現しようとするとかなりの技術が必要になります。EC-CUBEではuser_dataを別の文字に変更する方法が用意されているので、そちらを利用しましょう。
この不具合から「ページがみつかりません」エラーになっている場合、ログを見ると、下記のように出力されています。
ページがみつかりません。 ["","/src/Eccube/Controller/UserDataController.php",64] [GET, /hogehoge]
URLがUserDataControllerにマッチしてしまうものの、ページ管理のユーザー追加ページデータが見つからないためです。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。