Magento 2のアップグレード/セットアップスクリプトの順序をどのように制御しますか?


7

私はMagento 2のコードベースを調査していて、セットアップバージョン間でアップグレードセットアップクラスを実行する順序を制御する方法を理解しようとしています。まだ、行き詰まっています。掘り下げた限り、モジュール内のスキーマ/データのアップグレードの順序を制御する方法を見つけることができませんでした。

少しコンテキストを与えるために、モジュールをリリースするとします。残業はアップデートをリリースします。次のファイル構造があるとします。

Setup/InstallPostSchema.php
Setup/CreateAuthorsTableSchema.php
Setup/AddAuthorIdColumnToPostSchema.php

この場合、私はSetup/CreateAuthorsTableSchema.php前に実行したいと思いSetup/AddAuthorIdColumnToPostSchema.phpます。

私の質問は、それをどのように/どのように扱うべきですか?

Magento 1.xでは、ファイルの命名規則によってこれが処理さupgrade-1.0.0-1.1.0.phpれます。

LaravelやRailsなどのフレームワーク(および他のユーザーも確信している)では、タイムスタンプアプローチを使用しています。ただし、移行テーブルもあり、これまでに実行された各移行を確認できます。また、簡単にロールバックできます。

更新

Magento/Customerモジュール内で自分でバージョン管理を行う例を見つけました:

public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
    $setup->startSetup();

    if (version_compare($context->getVersion(), '2.0.0.1') < 0) {
        // Changes here.
    }

    if (version_compare($context->getVersion(), '2.0.1', '<')) {
        // Changes here
    }

    $setup->endSetup();
}

回答:


5

セットアップスクリプトの命名には、非常に厳密な標準があります。私の知る限り、任意に名前を付けて、実際に自分で何かをさせることはできません。見る:\Magento\Setup\Model\Installer::getSchemaDataHandler()

セットアップの変更は、彼らがしていることに対して適切なクラスに含まれる必要があります。

  • Setup\InstallSchema
  • Setup\UpgradeSchema
  • Setup\Recurring
  • Setup\InstallData
  • Setup\UpgradeData

それぞれに、Magentoが適切なときに呼び出すinstall()またはupgrade()エントリポイントが1つあります。

UpgradeSchema具体的には、次の点について質問Setup\UpgradeSchema::upgrade()しています。アップグレードプロセスをどのように処理するかは完全にあなた次第です。コード全体とプロセスを制御します。バージョンごとに(現在のバージョンを確認し、適切な変更を適用して最新にする)、またはセマンティックに(現在のスキーマを確認して必要な変更を適用し、IEが存在しない場合は作成者テーブルを作成する)、または何かを行うことができますそれ以外は完全に。

各アクションまたはバージョンを独自のメソッドにするか、ロードして明示的に呼び出すサブクラスをセットアップできます。それはあなた次第です。


ああ。その場合の最善のアプローチは、スキーマに関するバージョン管理を忘れることです(アップグレードされたモジュールでスキーマが変更されたことを示す場合を除く)。ご回答有難うございます!
Ash Smith
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.