EC-CUBE4 プラグイン開発では、 PluginManager でプラグインのインストールや有効時の処理を記述します。
管理している状態は以下の4つです。
- install (インストール時の処理)
- uninstall (アンインストール時の処理)
- enable (有効化時の処理)
- disable (無効化時の処理)
インストールを行った時にはもちろん、install( ) が実行されるわけですが、例えば、 有効時にアンインストールした場合 と 無効時にアンインストールした場合 は、どのような挙動を取るのでしょうか?
以下にまとめました。
実行コマンド
EC-CUBEに実装されている、開発用のプラグイン操作コマンドを使用しました。
bin/console eccube:plugin:install
bin/console eccube:plugin:uninstall
bin/console eccube:plugin:enable
bin/console eccube:plugin:disable
bin/console eccube:plugin:update
状態別実行関数とその順序
順番に実行される関数を表記します。
install()
のみ
enable()
のみ
disable()
のみ
uninstall()
のみ
disable()
からの
uninstall()
update()
のみ
update()
のみ
問題になりそうなのは、アップデート時の挙動です。
有効・無効どちらの状態でも、 update() しか呼ばれないため、 無効状態でフラグを false にし有効では true といった新機能を実装した場合、プラグインの今の状態がなにかを判定しないと、意図しない挙動となる可能性がありそうです。
例えば
public function enable()
{
// データベースの特定レコードのフィールドを true にする処理
}
public function disable()
{
// データベースの特定レコードのフィールドを false にする処理
}
public function update()
{
// データベースの特定レコードのフィールドを false にする処理
}
この場合、有効時に利用者がプラグインをアップデートすると、フィールドの値は false になってしまいます。
個人的には
この挙動から、有効時の update( ) 時では、
disable( )を実行してから、update( )を実行し、 enable( )が実行される という挙動の方が、開発側の負担は少ないのかなと感じました。
動作的にも、 disable( ) の実行時には、破壊的な処理は行わないと思いますので。