EC-CUBE3

EC-CUBE3のURLとファイルの関係(Providerの読み方)

More than 3 years have passed since last update.

まぁふつうにフレームワークとかさわり慣れてれば当たり前なんだろうけど

EC-CUBE2.13までは、アクセスしているURLと対応したディレクトリにかならずPHPファイルがあり、そこから見ていけば、どこを修正すればいいかが簡単に追うことができた。

EC-CUBE3では、今どきっぽく、ルーティングが採用されたので、アクセスしたURLだけではどこのファイルを触ればいいのか迷う。そんな時の探し方。

Providerをみる。

管理画面か、顧客画面(フロント)かで以下のどちらかを見ればよい

  • 管理画面

    • src\Eccube\ControllerProvider\AdminControllerProvider.php
  • フロント

    • src\Eccube\ControllerProvider\FrontControllerProvider.php

Providerに書かれているものの読み方

Providerを見ると以下のような記述がある

// mypage
        $controllers->match('/mypage/', '\\Eccube\\Controller\\MypageController::index')->bind('mypage');
        $controllers->match('/mypage/login.php', '\\Eccube\\Controller\\MypageController::login')->bind('mypage_login');
        $controllers->match('/mypage/change', '\\Eccube\\Controller\\Mypage\\ChangeController::index')->bind('mypage_change');
        $controllers->match('/mypage/change_complete.php', '\\Eccube\\Page\\Mypage\\ChangeComplete')->bind('mypage_change_complete');
        $controllers->match('/mypage/delivery.php', '\\Eccube\\Page\\Mypage\\Delivery')->bind('mypage_delivery');

以下は、http://ec-cubeのURL/mypage/ にアクセスした場合の内容が書かれている。

$controllers->match('/mypage/', '\\Eccube\\Controller\\MypageController::index')->bind('mypage');

以下は、http://ec-cubeのURL/mypage/change にアクセスした場合の内容が書かれている。

$controllers->match('/mypage/change', '\\Eccube\\Controller\\Mypage\\ChangeController::index')->bind('mypage_change');

それぞれ

$controllers->match('URLのパス', '呼び出されるコントローラークラス::呼びだされるメソッド')->bind('URL generatorなどで利用するショートカット表記'); 

のように理解してもらえばいい。

なので、URLからもぐっていきたい場合は、ここをみて呼び出されているコントローラークラスを確認して、開けば良い。上の例ならそれぞれ以下のファイルを見れば良いということになる。

  • /mypage/
    • src\Eccube\Controller\MypageController.php::index
  • /mypage/change
    • src\Eccube\Controller\Mypage\ChangeController.php::index

参考) 3系のソースに置き換えきっていないもの見分け方

以下はまだ2.13系のままでリファクタが終わっていないもの。(Controllerではなく、Pageになっているところに注目)

$controllers->match('/mypage/delivery.php', '\\Eccube\\Page\\Mypage\\Delivery')->bind('mypage_delivery');