EC-CUBE 3.1-αの拡張機構を試してみる


3/15、16に、EC-CUBE 3.1-αの方針説明会が開催されました。

資料は以下で公開されていますが、当日ライブコーディングでデモした内容は含まれていないので、こちらでも紹介したいと思います。

EC-CUBE3.1開発方針説明会資料

大きな方針としては、学習コストの低減とカスタマイズ性の向上の2点。
3.0での課題やフィードバックに対応していく予定です。

GitHubの、主要なissueやpull requestには、milestone:3.1、label:experimentalが振られていますので参考にしてください。

3.1-αのインストール

3.1-αは、experimental/3.1というブランチで開発が進められています。
パッケージ版は公開されていないため、GitHubからcloneしてくる必要があります。

// githubからclone
git clone --branch=experimental/3.1 https://github.com/EC-CUBE/ec-cube.git

// コマンドラインインストーラからインストール
cd ec-cube
php eccube_install.php sqlite

アノテーションでのルーティング制御

ここから、当日デモした内容です。
phpのビルトインサーバを立ち上げてれば簡単に動作確認を行うことができます。

// ビルトインサーバを立ち上げる
php -S localhost:8081 -t ./

3.1からルーティングの制御をアノテーションという仕組みで行うことができるようになりました。
試してみるには、app/Acme/Controllerディレクトリに、コントローラのクラスを配置します。

app/Acme/Controller/HogeController.php
<?php

namespace Acme\Controller;

use Eccube\Application;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class HogeController
{
    /**
     * @Route("/hoge")
     */
    public function index(Application $app)
    {
        return "hoge";
    }
}

http://localhost:8081/index_dev.php/hoge にアクセスし、hogeという文字列が表示されていれば成功です。

既存のルーティングを上書きすることもできます。

    /**
     * @Route("/")
     */
    public function index(Application $app)
    {
        return "hoge";
    }

http://localhost:8081/index_dev.php/ にアクセスすると、トップページから、hogeという文字列が表示されるように変わっているはずです。

どう変わったか

3.0では、コントローラを新たに追加する際には

  • コントローラのクラスを追加する
  • src/Eccube/ControllerProvider/Front(Admin)ControllerProvider.phpにルーティングの定義を追加する

を行う必要がありました。

また、コアコードに手を入れずに拡張するには、プラグイン機構を利用し、プラグイン関連のファイルを設置する必要があり、非常に手間のかかるものでした。

3.1ではアノテーションを利用できるようになり、だいぶ簡略化されているのがわかるかと思います。

また、購入フローのコントローラを参照いただければわかりますが、コントローラ内のメソッドが、細かな粒度に分割されています。これにより、処理の一部の振る舞いを変更する、といったことも可能になります。

利用できるアノテーション

@Routeアノテーション以外にも、以下のアノテーションが利用できます。

  • @Route
  • @Method
  • @Template
  • @Security

それぞれのアノテーションの利用方法は、app/Acme/Controller以下にサンプルを作成していますので、参考にしてみてください。