新機能を実装する際は、依存しないようにするためec-cube4では追加機能はプラグインとして開発することができる。
今回はその手順をメモしておく。
公式のドキュメント
プラグインの作成
bin/console eccube:plugin:generate
EC-CUBE Plugin Generator Interactive Wizard
===========================================
name [EC-CUBE Sample Plugin]:
> #プラグインの名前
code [Sample]:
> #プラグインのコード名
ver [1.0.0]:
> #プラグインのバージョン
#問題無ければ最後にOKが出力される
[OK] Plugin was successfully created: [プラグインの名前] [プラグインのコード名] [プラグインのバージョン]
ディレクトリのデフォルト構成は以下のようになる
[プラグインのコード名]
|--Controller
| |--Admin
| | |--ConfigController.php
|--Entity
| |--Config.php
|--Event.php
|--Form
| |--Extension
| |--Type
| | |--Admin
| | | |--ConfigType.php
|--Nav.php
|--Repository
| |--ConfigRepository.php
|--Resource
| |--doctrine
| |--locale
| | |--messages.ja.yaml
| | |--validators.ja.yaml
| |--template
| | |--admin
| | | |--config.twig
|--TwigBlock.php
|--composer.json
各ファイルの役割
プラグイン開発時に新しく出てきたファイルだけメモ。
Controller・Entity・Repositoryなどは割愛。
Nav.php
管理画面にメニューを追加する場合は、こちらに記述する。
今回はカタログの管理メニューを追加した。
ec-cube4決済プラグインを参考にした。
メニューの構造はeccube_nav.yamlを参考にするといいようだ。
/src/app/config/eccube/packages/eccube_nav.yaml
<?php
namespace Plugin\CatalogCrud;
use Eccube\Common\EccubeNav;
class Nav implements EccubeNav
{
/**
* @return array
*/
public static function getNav()
{
return [
'content' => [
'children' => [
'plugin_catalog' => [
'name' => 'plugin_catalog.admin.navi',
'url' => 'plugin_catalog_list',
],
],
],
];
}
}
こちらに記述されているメニューはプラグインが有効の時の表示される。
PluginManager.php
以下の処理の時に独自の処理を加えた場合はこちらに記述する。
- プラグインのインストール
- プラグインのアンインストール
- プラグインの有効化
- プラグインの無効化
デフォルトではないので作成する必要がある。
デフォルトの各挙動は次の通り。
インストール時の挙動
- Entityからテーブルの作成
- Controllerからルーティングの設定
- Nav.phpからメニューの追加
アンインストール時の挙動
- Entityで作成されたテーブルの削除
- Controllerからルーティングの削除
- Nav.phpからメニューの削除
最後にディレクトリごとファイルが削除された。
有効化にしたときの挙動
- メニュー表示
無効化にしたときの挙動
- メニュー非表示
※まだ完全に把握出来ていないので、誤りがある可能性があります。
ご了承ください。
上記以外の処理を追加したい場合には、PluginManager.phpに記述するようだ。