前の記事では、ECCUBE3を始めるにあたって知っておいた方がましなこと、を書いた。
今回は全体の概要。
目次
Requirements
- [EC-CUBE] EC-CUBE3.0.16
- [レンタルサーバ] さくらインターネット
- [OS] FreeBSD 9.1-RELEASE-p24
- [PHP] 5.6.38
- [データベース] MySQL 5.7.22-log
- [WEBサーバ] Apache
- [ブラウザ] Chrome
インストール時のディレクトリ構成
インストールディレクトリには、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 に処理を記述
これは別の記事で詳しく説明する。