Help us understand the problem. What is going on with this article?

ec-cube4でプラグイン開発を始める|プラグインの新規作成

More than 1 year has passed since last update.

新機能を実装する際は、依存しないようにするため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に記述するようだ。

yyphp
PHPerが毎週集まり、ざっくばらんに情報交換する雑談コミュニティ
https://yyphp.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away