LoginSignup
0
0

More than 3 years have passed since last update.

EC-CUBE4 プラグイン開発 PluginManager の状況別実行関数

Posted at

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( ) の実行時には、破壊的な処理は行わないと思いますので。
```

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0