Because We Love Happy Coding

フリーライターからエンジニアへ。発信力だけあり余ってる感じ

ECCUBE3 の概要

前の記事では、ECCUBE3を始めるにあたって知っておいた方がましなこと、を書いた。

今回は全体の概要。

Requirements

インストール時のディレクトリ構成

インストールディレクトリには、4つのディレクトリが配置されている。

  • apps
  • html
  • src
  • vendor

それぞれの役割を紹介する。

appディレクト

さまざまなカスタマイズを行うためのフォルダ。

  • 設定ファイルを変更する
  • 既存のテンプレートを置き換える
  • プラグインを配置する

などが、本体に手を加えることなく可能になっている。カスタマイズでは主にここをいじることになる。

htmlディレクト

公開ディレクトリ。CSS、JSなど外部からアクセスされるリソースはここに配備する。

ストアからインストールするようなプラグインCSSなどが必要な場合は、html/plugin/{プラグインコード}以下にCSSを設置する。プラグインマネージャーのinstall()メソッドで、インストール時にコピーするような処理をつける。

srcディレクト

ECCUBE本体がここに置かれている。

Src/Eccube/Resource/templateの中にはTwigテンプレートファイルがある。テンプレートを編集したい場合は、app/template にコピーして編集する。

vendorディレクト

ECCUBEとは別のプロダクトのソースが置かれている。Symfony/Silex、Twig、Doctorineなどの本体はこちらにある模様。たまにDoctorineのメソッドなどを調べるために開くことがある。

各クラスの役割を理解する

↓このスライドの中に一覧表があり、わかりやすい。 EC-CUBE3コードリーディング \#1 - Speaker Deck

ControllerProvider

基本的にはFront(お客様用)、Admin(管理画面用)、Installの3種類。

リクエストが来たら、それをControllerに丸投げする。丸投げ先一覧表として機能する。

Controller

ルーティングに対してどのクラスのメソッドを実行するか規定する。

[[PHP]Silexの基本的なルーティング方法とTwigによるビューの作り方 | PHP Archive]2

一般的なMVCの考え方では、「ユーザーの1アクション(ユースケース)を1つのControllerが処理する、いわばシナリオ的な役割をする。

ECCUBE3では、HTTPリクエストを受けてからの一連の処理を担当する。典型的には、1つの画面(Webページ)を表示するために、render()でtwigテンプレートに変数を渡すことで完了する。

ServiceProvider

他のクラスで使用するようなサービスを提供する。ECCUBE3内で共通に利用されるようなAPIだと思えばよいか。

プラグインは基本的にServiceProviderの一種として実行される。

ServiceProviderInterfaceを実装するため、register()とboot()の2つのメソッドを定義しておかないと動かない。

register() の中では、Application $appにさまざまなものを登録していく。

  • routingとメソッドの紐付け
  • FormType、Repositoryなどの共通部品

Entity

データベースから取り出した情報を託すためのデータオブジェクト。商品1つの情報をデータベースから取り出したら、ProductEntityにsetして扱う。3つの商品があれば3つのEntityが必要になる。

よく使うのは

  • ProductEntity
  • ProductClassEntity
  • CategoryEntity
  • MemberEntity

など。

例えばOrderオブジェクトからデータを取り出したい時、中にどんな項目があるか、どのようなゲッターを使えばいいかははsrc/Eccube/Entity/Orderを調べればわかる。

Repository

Entityの集合、データ置場、というようなニュアンス。データベースから情報を引き出す、などの操作を担当する。

Form

HTMLのフォームを効率よく扱うための一連の処理がSymfonyにはあり、これが素人目には直観的ではないので難解に見える。

$builder = $app['form.factory']->createNamedBuilder('', 'hoge');//事前に登録したhogeというFormTypeを作るためのFormBuilderを起動
$form = $builder->getForm();//Formを生成する
$form->handleRequest($request);//FormにHTTPリクエストを渡して処理をさせる
$data = $form->getData();//HTTPリクエストからデータを取り出す

といった処理になる模様。

FormType

いくつかのフォームをセットにして名前をつけ定義したもの。例えば「商品購入用のフォームのセット」というように。

まとめ

MVC モデルがわかればよりスムーズにECCUBE3を理解できる。

プラグインでは以下の流れになる。

  • ServiceProviderに「きっかけ」「Controller::メソッド」の組み合わせを登録する。
  • Controller に処理を記述

これは別の記事で詳しく説明する。