EC-CUBE3でたまに確認されるエラー、Method not allowed エラーについて説明します。Whoops, looks like something went wrong.と怒られてしまった場合は、このエラーのことを思い出して見てください。


EC-CUBEにアクセスする場合、ブラウザは主にGET、POST、PUT、DELETEという4種類のアクセス方法(Method)を使用します。

「No route found for …」というエラーが見えた時はAdminControllerProvider(管理画面側)FrontControllerProvider(ショップ側)を確認しましよう。この2つのクラスによって、このURLはこのMethodでアクセスしてくださいね〜という内容がずらずらと指定されています。

MethodNotFounrException

No route found for “GET /admin/”: Method Not Allowed (Allow: POST)

上のメッセージの意味は/admin/というURLにGETでアクセスしてきてるけどPOSTしか許可されていませんよ〜という意味です。AdminControllerProviderを確認すれば、アクセス方法の指定を間違って変更してしまったことが分かります。

// POST指定になっている
$c->post('/', '\Eccube\Controller\Admin\AdminController::index')->bind('admin_homepage');

// matchで全メソッド許可に変更
$c->match('/', '\Eccube\Controller\Admin\AdminController::index')->bind('admin_homepage');

※閑話休題
EC-CUBEではSymfonyの機能であるRequest::enableHttpMethodParameterOverrideを使用してPOSTでPUTやDELETEを代替しています。PUTとDELETEに関しては使用できないブラウザがあるためで、フレームワークを利用したシステムではよく見られる方法です。