【EC-CUBE 4】新規ページのControllerを作成する方法

管理画面から新しく作成したページ(URLに「user_data」が含まれるもの)について、

  • Controllerってどこにあるの?
  • Controllerを新しく作成するには?
  • ControllerのRoutingはどう書けば良い?

この記事では、このような疑問にお答えしていきます。

【動作環境】
EC CUBEのバージョン:4.1.2
サーバー:Xserver
ブラウザ:Google Chrome

なおデバッグモードを設定しておくと、エラーが起きたときに詳細情報が表示されるようになります。
エラー箇所を探しやすくなるので、開発前に設定しておくのをオススメします。
デバッグモードの設定方法については こちらの記事 で解説しています。

目次

管理画面から新規作成したページのControllerの格納場所

「public/src/Eccube/Controller」下にある「UserDataController.php」です。

ただ、このControllerは管理画面で作成したすべての新規ページに影響するので、このControllerを直接編集することはもちろん、「app/Customize/Controller」下にコピーして編集することもオススメしません。

新規ページのControllerを編集したい場合は、そのページ専用のControllerを作成して編集するのが簡単でオススメです。(次項で解説)

ファイルが見つからない?

Xserverのファイルマネージャーを使っている方で、上記ディレクトリを辿っても「UserDataController.php」を確認できないことがありますが、その場でリロードすると表示されます。原因は不明で、Xserver(もしくはブラウザ?)のバグかもしれません。

もしXserverのファイルマネージャーを使っていて、「フォルダにあるはずのファイルがない」という問題に直面している方は、リロードしてみると見つかるかもしれません。

管理画面から新規作成したページのController作成方法

ここでは、管理画面から作成したページのControllerを実際に作成してみます。

Routingについて

管理画面から作成したページは、Routingの仕方がちょっと特殊です。

前項のControllerをのぞいてみると、新規作成ページのRoutingは以下のように記載されています。

    /**
     * @Route("/%eccube_user_data_route%/{route}", name="user_data", requirements={"route": "([0-9a-zA-Z_\-]+\/?)+(?<!\/)"})
     */

“/%eccube_user_data_route%/{route}” の{route}部分に独自で設定したURLがきます。name部分はURLに関係なくすべて “user_data” となります。
これにならってRoutingを書くと、例として以下のような形になります。

    /**
     * @Route("/%eccube_user_data_route%/products/sample", name="user_data")
     */

Controllerの例

以下のようなURLとファイル名で、管理画面からページを作成した場合のControllerを作ってみました。

このControllerを「app/Customize/Controller」下にアップすると、このControllerを経由してページが表示されるようになります。

管理画面から新規作成したページのControllerの例
URL

products/sample

ファイル名

products_sample(.twig)

<?php

namespace Customize\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Eccube\Controller\AbstractController;

class SampleProductPageController extends AbstractController
{
    /**
     * @Route("/%eccube_user_data_route%/products/sample", name="user_data")
     */
    public function index(Request $request)
    {
        return $this->render('@user_data/products_sample.twig');
    }
}
  • 設定したいURLやファイル名によって、Routing部分は適宜修正してください。

まだページを表示するだけのControllerのため、実際にページにアクセスしても見た目は何も変化しません。
が、このControllerを編集することでデータベースに保存された情報を表示させるなどの操作ができるようになるため、カスタマイズの幅がぐっと広がります。

管理画面から新規作成したページ(URLに「user_data」を含むもの)のController作成で注意する点は、@Route部分の表記方法と、returnで$this->render(‘twigファイル’)を返すという表記方法です。

デフォルトで用意されているページや、以下記事のようなURLから「user_data」を消したページのControllerとは表記の仕方が異なるので、注意してください。

まとめ

以上、管理画面から新規作成したページのControllerについて紹介しました。

本記事で作成したのはただページを表示するだけのControllerですが、RepositoryやFormTypeを組み合わせることでデータベースを操作できるようになるなど、カスタマイズの幅が一気に広がります。
ぜひ、いろいろ試してみてください!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次