Wie steuern Sie die Reihenfolge von Upgrade- / Setup-Skripten in Magento 2?

7

Ich habe die Codebasis für Magento 2 untersucht und versucht herauszufinden, wie Sie die Reihenfolge steuern können, in der Upgrade-Setup-Klassen zwischen Setup-Versionen ausgeführt werden. Trotzdem stecke ich fest. Was mein Graben angeht, konnte ich keine Möglichkeit finden, die Reihenfolge der Schema- / Daten-Upgrades in meinem Modul zu steuern.

Nehmen wir an, ich veröffentliche ein Modul, um einen kleinen Kontext zu geben. Im Laufe der Zeit veröffentlichen wir Updates. Angenommen, ich habe die folgende Dateistruktur:

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

In diesem Fall möchte ich vorher Setup/CreateAuthorsTableSchema.phplaufen Setup/AddAuthorIdColumnToPostSchema.php.

Meine Frage ist, wie sollen / sollen wir damit umgehen?

In Magento 1.x hat die Dateinamenskonvention dies für uns behandelt: upgrade-1.0.0-1.1.0.phpzum Beispiel.

Frameworks wie Laravel oder Rails (und andere, da bin ich mir sicher) verwenden einen Zeitstempel-Ansatz. Sie verfügen jedoch auch über eine Migrationstabelle, in der Sie über jede bisher ausgeführte Migration informiert werden. Ermöglicht auch ein einfaches Zurückrollen.

Aktualisieren

Ich habe ein Beispiel für die Verwaltung der Versionierung innerhalb des Magento/CustomerModuls gefunden:

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();
}
Ash Smith
quelle

Antworten:

5

Es gibt einen sehr strengen Standard für die Benennung von Setup-Skripten. Meines Wissens können Sie sie nicht willkürlich benennen und sie tatsächlich selbst etwas tun lassen. Sehen:\Magento\Setup\Model\Installer::getSchemaDataHandler()

Ihre Setup-Änderungen müssen in die entsprechende Klasse für das fallen, was sie tun:

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

Jeder hat einen einzelnen Installations- () oder Upgrade- () Einstiegspunkt, den Magento zum richtigen Zeitpunkt aufruft.

Sie fragen UpgradeSchemaspeziell: Wie Sie mit dem Upgrade-Prozess umgehen, Setup\UpgradeSchema::upgrade()liegt ganz bei Ihnen. Sie steuern den gesamten Code und Prozess. Sie können dies versioniert (überprüfen Sie die aktuelle Version, wenden Sie die entsprechenden Änderungen an, um sie auf den neuesten Stand zu bringen) oder semantisch (überprüfen Sie das aktuelle Schema und wenden Sie die erforderlichen Änderungen an, IE erstellen Sie eine Autorentabelle, falls diese nicht vorhanden ist) oder etwas anderes an sonst ganz.

Sie können jede Aktion oder Version zu einer eigenen Methode machen oder Unterklassen einrichten, die Sie laden und explizit aufrufen. Das liegt an dir.

Ryan Hoerr
quelle
Ah ok. Ich würde sagen, der beste Ansatz in diesem Fall wäre, die Versionierung in Bezug auf unser Schema zu vergessen (außer für die Angabe, dass sich das Schema mit einem aktualisierten Modul geändert hat). Danke für deine Antwort!
Ash Smith