Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

プラグインのライフサイクルとエンティティProxy再生成/スキーマ更新タイミングの調整 #2546

Merged
merged 2 commits into from
Oct 11, 2017

Conversation

kiy0taka
Copy link
Contributor

@kiy0taka kiy0taka commented Oct 6, 2017

概要(Overview・Refs Issue)

プラグイン削除時にスキーマ更新するためにProxyの再生成も合わせて実行タイミングを変更

方針(Policy)

以下のようなEntity拡張Traitを含むプラグインがあるとき、本体側ではProxyの再生成とスキーマの更新を行う必要があります。

/**
 * @EntityExtension("Eccube\Entity\Customer")
 */
trait HogeTrait
{
    /**
     * @ORM\Column(name="hoge", type="string")
     */
    public $hoge;
}

少なくともプラグインが有効のときには、以下の状態になる必要があります。

  • ProxyでこのTraitが利用されている
  • スキーマが更新されdtb_productテーブルにhogeカラムが追加されている

プラグインが無効のときは、プラグインに含まれるすべての機能が無効になっている必要があるため、Traitも利用されないようにするべきです。しかしプラグインによって作られたデータは、プラグインを無効化したあとで再度有効化する場合を考えると、残しておく必要があります。

これらを踏まえて、プラグインのライフサイクル内でのTraitとスキーマの関係は以下のようにしました。

処理 Plugin Trait カラム
インストール 無効 利用されない 追加 Proxyは再生成されない
スキーマは更新される
有効化 有効 利用される 追加済 Proxyが再生成されプラグインのTraitが有効になる
スキーマはインストール時に更新済み
無効化 無効 利用されない 追加済 Proxyが再生されプラグインのTraitが無効になる
スキーマは残ったまま
削除 - 利用されない 削除 プラグインで拡張したスキーマが破棄される

テスト(Test)

  • PluginServiceWithEntityExtensionTest でプラグインのインストール/有効化/無効化/削除の振る舞いをテストしています。スキーマ更新については他のテストに影響がでるため、モックを使用しています。

相談(Discussion)

  • プラグインインストール時Traitを適用せずにスキーマ更新するために、app/proxy/entityではなく一時ディレクトリにProxyを生成してからアノテーションを読み込んでいますが、Traitから直接アノテーションを読み込んでメタデータを自力でマージしたほうが良いのかも。

@kiy0taka kiy0taka added this to the 3.1.0 milestone Oct 7, 2017
@kiy0taka kiy0taka changed the title [WIP]プラグインのライフサイクルとエンティティProxy再生成/スキーマ更新タイミングの調整 プラグインのライフサイクルとエンティティProxy再生成/スキーマ更新タイミングの調整 Oct 10, 2017
@Yangsin Yangsin merged commit 69f5707 into EC-CUBE:experimental/3.1 Oct 11, 2017
@kiy0taka kiy0taka deleted the dev/schema-update branch October 12, 2017 01:52
@Yangsin Yangsin added the enhancement 機能追加 label Oct 17, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement 機能追加
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants