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.php
chạ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.php
ví 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/Customer
mô-đ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();
}