Làm thế nào để bạn kiểm soát thứ tự các kịch bản nâng cấp / thiết lập trong Magento 2?


7

Tôi đã khám phá cơ sở mã cho Magento 2 và tôi đã cố gắng tìm hiểu làm thế nào bạn có thể kiểm soát thứ tự các lớp thiết lập nâng cấp sẽ chạy giữa các phiên bản thiết lập. Tuy nhiên, tôi đang bị mắc kẹt. Theo như quá trình đào của tôi, tôi không thể tìm ra cách nào để kiểm soát thứ tự nâng cấp lược đồ / dữ liệu trong mô-đun của mình.

Để đưa ra một bối cảnh nhỏ, giả sử tôi phát hành một mô-đun. Làm thêm giờ chúng tôi phát hành bản cập nhật. Giả sử tôi có cấu trúc tệp sau:

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

Trong trường hợp này tôi muốn Setup/CreateAuthorsTableSchema.phpchạy trước Setup/AddAuthorIdColumnToPostSchema.php.

Câu hỏi của tôi là, làm thế nào / chúng ta nên đối phó với điều đó?

Trong Magento 1.x, quy ước đặt tên tệp đã xử lý việc này cho chúng tôi: upgrade-1.0.0-1.1.0.phpví dụ.

Các khung như Laravel hoặc Rails (và những người khác tôi chắc chắn) sử dụng phương pháp dấu thời gian. Tuy nhiên, họ cũng có một bảng di chuyển sẽ cho bạn biết mỗi lần di chuyển đã chạy cho đến nay. Cũng cho phép rollback dễ dàng.

Cập nhật

Tôi đã tìm thấy một ví dụ về việc tự quản lý phiên bản trong Magento/Customermô-đun:

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

Câu trả lời:


5

Có một tiêu chuẩn rất nghiêm ngặt để đặt tên cho các tập lệnh thiết lập. Theo hiểu biết của tôi, bạn không thể đặt tên chúng một cách tùy tiện và thực sự chúng tự làm mọi thứ. Xem:\Magento\Setup\Model\Installer::getSchemaDataHandler()

Thay đổi thiết lập của bạn phải nằm trong lớp thích hợp cho những gì họ đang làm:

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

Mỗi cái có một điểm nhập cài đặt () hoặc nâng cấp () mà Magento gọi vào thời điểm thích hợp.

Bạn đang hỏi về UpgradeSchemacụ thể: Cách bạn xử lý quá trình nâng cấp Setup\UpgradeSchema::upgrade()hoàn toàn phụ thuộc vào bạn. Bạn kiểm soát toàn bộ mã và xử lý. Bạn có thể thực hiện theo phiên bản (kiểm tra phiên bản hiện tại, áp dụng các thay đổi phù hợp để cập nhật) hoặc theo ngữ nghĩa (kiểm tra lược đồ hiện tại và áp dụng các thay đổi cần thiết, bảng tạo tác giả IE nếu không tồn tại) hoặc một cái gì đó khác hoàn toàn.

Bạn có thể thực hiện mỗi hành động hoặc phiên bản phương thức riêng của mình hoặc thiết lập các lớp con mà bạn tải và gọi một cách rõ ràng. Tùy bạn.


À được rồi Tôi muốn nói rằng cách tiếp cận tốt nhất trong trường hợp đó là quên đi việc tạo phiên bản liên quan đến lược đồ của chúng tôi (ngoài việc cho biết lược đồ đã thay đổi với một mô-đun được nâng cấp). Cảm ơn câu trả lời của bạn!
Ash Smith
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.