Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
255 lines (204 sloc) 6.18 KB
title keywords tags sidebar permalink
プラグインマネージャー
plugin
plugin
home_sidebar
plugin_bp_pluginmanager

プラグインのインストール、アンインストール、有効、無効、アップデートを行うときに必ず呼び出されるクラスがあります。
そのクラスはPluginManagerであり、例えばプラグインをインストール時に行っておきたい処理はPluginManagerに記述しておきます。

[プラグインコード]
  ├── PluginManager.php
<?php
namespace Plugin\[プラグインコード];

use Eccube\Application;
use Eccube\Plugin\AbstractPluginManager;

class PluginManager extends AbstractPluginManager
{

    /**
     * プラグインインストール時の処理
     *
     * @param $config
     * @param Application $app
     * @throws \Exception
     */
    public function install($config, Application $app)
    {
    }

    /**
     * プラグイン削除時の処理
     *
     * @param $config
     * @param Application $app
     */
    public function uninstall($config, Application $app)
    {
    }

    /**
     * プラグイン有効時の処理
     *
     * @param $config
     * @param Application $app
     * @throws \Exception
     */
    public function enable($config, Application $app)
    {
    }

    /**
     * プラグイン無効時の処理
     *
     * @param $config
     * @param Application $app
     * @throws \Exception
     */
    public function disable($config, Application $app)
    {
    }

    /**
     * プラグイン更新時の処理
     *
     * @param $config
     * @param Application $app
     * @throws \Exception
     */
    public function update($config, Application $app)
    {
    }

}

それぞれの関数で行う処理をまとめていきます。

インストール(install)

プラグインをインストール時に実行される関数です。ここで行う主な処理として、

  • 画像やcssファイルなどプラグインで使用するリソースファイルのコピー処理
  • インストール時に1回だけ行いたい処理

等を記述します。

アンインストール(uninstall)

プラグインをアンインストール時に実行される関数です。ここで行う主な処理として、

  • アンインストール時に行いたい処理
  • ブロック削除
  • 画像やcssファイルなどプラグインで使用するリソースファイルの削除
  • DBマイグレーション処理(プラグインで利用するテーブル削除)
    $this->migrationSchema($app, __DIR__.'/Resource/doctrine/migration', $config['code'], 0);

等を記述します。

有効(enable)

プラグインを有効時に実行される関数です。ここで行う主な処理として、

  • DBマイグレーション処理
    $this->migrationSchema($app, __DIR__.'/Resource/doctrine/migration', $config['code']);
  • ブロックの追加

等を記述します。

無効(disable)

プラグインを無効時に実行される関数です。ここで行う主な処理として、

  • ブロックの無効化

等を記述します。

更新(update)

プラグインを更新時に実行される関数です。ここで行う主な処理として、

  • DBマイグレーション処理
    $this->migrationSchema($app, __DIR__.'/Resource/doctrine/migration', $config['code']);
  • リソースファイルのコピー、削除
  • 新規ブロックの追加

等機能を追加した時に実行したい処理を記述します。
インストール時の処理とほぼ同じになります。

  • 上記処理を考慮した例
<?php
namespace Plugin\[プラグインコード];

use Eccube\Application;
use Eccube\Plugin\AbstractPluginManager;
use Symfony\Component\Filesystem\Filesystem;

class PluginManager extends AbstractPluginManager
{

    /**
     * @var string コピー元リソースディレクトリ
     */
    private $origin;

    /**
     * @var string コピー先リソースディレクトリ
     */
    private $target;

    public function __construct()
    {
        // コピー元のディレクトリ
        $this->origin = __DIR__.'/Resource/assets';
        // コピー先のディレクトリ
        $this->target = '/xxxxxx';
    }

    /**
     * プラグインインストール時の処理
     *
     * @param $config
     * @param Application $app
     * @throws \Exception
     */
    public function install($config, Application $app)
    {
        // リソースファイルのコピー
        $this->copyAssets($app);
    }

    /**
     * プラグイン削除時の処理
     *
     * @param $config
     * @param Application $app
     */
    public function uninstall($config, Application $app)
    {
        $this->migrationSchema($app, __DIR__.'/Resource/doctrine/migration', $config['code'], 0);
        // リソースファイルの削除
        $this->removeAssets($app);
    }

    /**
     * プラグイン有効時の処理
     *
     * @param $config
     * @param Application $app
     * @throws \Exception
     */
    public function enable($config, Application $app)
    {
        $this->migrationSchema($app, __DIR__.'/Resource/doctrine/migration', $config['code']);
    }

    /**
     * プラグイン無効時の処理
     *
     * @param $config
     * @param Application $app
     * @throws \Exception
     */
    public function disable($config, Application $app)
    {
    }

    /**
     * プラグイン更新時の処理
     *
     * @param $config
     * @param Application $app
     * @throws \Exception
     */
    public function update($config, Application $app)
    {
    }

    /**
     * リソースファイル等をコピー
     *
     * @param Application $app
     */
    private function copyAssets(Application $app)
    {
        $file = new Filesystem();
        $file->mirror($this->origin, $app['config']['plugin_html_realdir'].$this->target.'/assets');
    }

    /**
     * コピーしたリソースファイルなどを削除
     *
     * @param Application $app
     */
    private function removeAssets(Application $app)
    {
        $file = new Filesystem();
        $file->remove($app['config']['plugin_html_realdir'].$this->target);
    }
}