プラグインのインストール、アンインストール、有効、無効、アップデートを行うときに必ず呼び出されるクラスがあります。
そのクラスは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);
}
}