Mô-đun gỡ cài đặt Magento 2


13

Rõ ràng, bây giờ Magento 2 hỗ trợ gỡ cài đặt các tập lệnh cho phép sửa đổi lược đồ db khi gỡ cài đặt mô-đun (horay !!).
Như đã giải thích ở đây, điều này chỉ hoạt động cho mô-đun được cài đặt thông qua trình soạn thảo.
(Tôi hy vọng nó sẽ hoạt động trong tương lai cho tất cả các mô-đun, nhưng đó là một vấn đề khác).
Hãy nói rằng tôi có một mô-đun được gọi Testing_Demo.
Mô-đun này thực hiện 3 điều mà tôi muốn được gỡ bỏ khi gỡ cài đặt nó.

  1. thêm một bảng gọi testing_demo. Vì vậy, tôi cần phải bỏ nó.
  2. thêm một thuộc tính sản phẩm được gọi là demo. Vì vậy, điều này cần phải được loại bỏ
  3. có một số cài đặt trong system->configurationđó có thể hoặc không thể được lưu trữ trong bảng core_config_data. Tất cả các cài đặt này có đường dẫn testing_demo/.... Vì vậy, những điều này cũng cần phải được loại bỏ.

Làm thế nào để mô-đun gỡ cài đặt kịch bản của tôi trông như thế nào?


Tôi đoán rằng tập lệnh gỡ cài đặt của bạn sẽ giống như một thử nghiệm tích hợp để xem việc xóa các tiện ích mở rộng của bạn sẽ hỗ trợ giao diện hay các mối quan hệ lược đồ
Anton S

Tôi không thể mâu thuẫn với bạn ở đó. bạn có thể đúng, nhưng làm thế nào để tôi làm điều đó? :)
Marius

Tôi không có máy bay phản lực nhưng về lý thuyết bạn nên biết liệu dữ liệu bạn thu thập có thể bị hủy hay không và do đó, quy trình gỡ cài đặt phải là hướng dẫn từng bước hướng dẫn người bán xác minh xem quy trình sau có ảnh hưởng đến trách nhiệm của người bán không , trên khách hàng, v.v. Vì vậy, phần hoàn toàn là kỹ thuật có thể dễ dàng đi qua bố cục và xem liệu phần mở rộng của bạn có được tham chiếu, mở rộng hay không, các phần khác phụ thuộc vào tất cả các phần mở rộng nhưng các quyết định kinh doanh phía sau vẫn tùy thuộc vào người bán quyết định và bạn chỉ có thể quyết định chỉ ra xung đột
Anton S

sự phụ thuộc phải được xử lý trước khi gỡ cài đặt để đây không phải là vấn đề của tôi. Giả sử tôi đã quyết định xóa hoàn toàn tiện ích mở rộng và không có gì phụ thuộc vào tiện ích mở rộng.
Marius

Vì vậy, bạn chỉ cần thu hẹp điều này xuống các bảng bán phá giá và mặt dữ liệu của mọi thứ?
Anton S

Câu trả lời:


18

Tìm kiếm trên codebase cho UninstallInterfacecho \Magento\Setup\Model\UninstallCollector.

Nếu bạn tìm kiếm UninstallCollectorsau đó, bạn sẽ thấy đó được sử dụng trong \Magento\Setup\Console\Command\ModuleUninstallCommand. Đặc biệt có liên quan:

    $uninstalls = $this->collector->collectUninstall();
    $setupModel = $this->objectManager->get('Magento\Setup\Module\Setup');
    foreach ($modules as $module) {
        if (isset($uninstalls[$module])) {
            $output->writeln("<info>Removing data of $module</info>");
            $uninstalls[$module]->uninstall(
                $setupModel,
                new ModuleContext($this->moduleResource->getDbVersion($module) ?: '')
            );
        } else {
            $output->writeln("<info>No data to clear in $module</info>");
        }
    }

Đặt lại với nhau, chúng ta có thể phỏng đoán:

  1. Mô-đun của bạn nên chứa một Uninstalllớp tại {module}\Setup\Uninstall.php.
  2. Lớp này nên thực hiện Magento\Framework\Setup\UninstallInterface.
  3. Lớp này nên có một uninstallphương thức chứa bất kỳ logic cần thiết nào.
  4. Các đối tượng và phương thức tương tự có sẵn cho bạn như trong bất kỳ tập lệnh thiết lập hoặc nâng cấp nào.

Vì vậy, đây là bộ xương của bạn:

<?php

namespace \Custom\Module\Setup;

class Uninstall implements \Magento\Framework\Setup\UninstallInterface
{
    /**
     * Module uninstall code
     *
     * @param \Magento\Framework\Setup\SchemaSetupInterface $setup
     * @param \Magento\Framework\Setup\ModuleContextInterface $context
     * @return void
     */
    public function uninstall(
        \Magento\Framework\Setup\SchemaSetupInterface $setup,
        \Magento\Framework\Setup\ModuleContextInterface $context
    ) {
        $setup->startSetup();

        // Uninstall logic here

        $setup->endSetup();
    }
}

Xóa bất kỳ bảng, cột hoặc dữ liệu bằng các phương pháp thích hợp. Xem \Magento\Framework\DB\Adapter\AdapterInterface, có sẵn như $setup->getConnection().


Cảm ơn câu trả lời. Tôi sẽ kiểm tra và trở lại với một kết quả.
Marius

@Marius bạn không đề cập đến việc nó có hiệu quả với bạn hay không. Ngoài ra, tôi muốn biết tập lệnh gỡ cài đặt này sẽ chạy trực tiếp hay nó sẽ được kích hoạt khi chúng tôi chạy mô-đun: gỡ cài đặt
Adnan

1
@Ad Nam. Đúng. Nó đã làm việc. Kịch bản được gọi khi chạy lệnh console để gỡ cài đặt mô-đun.
Marius

@Marius, Trong trường hợp bạn có một nhóm, các nhà phát triển khác nên làm gì? mỗi người trong số họ nên chạy lệnh? Có trường hợp nào để chạy nó tự động với lần kéo tiếp theo không?
sergio

[Ngoại lệ] Chức năng không dùng nữa: Các phương thức có cùng tên với lớp của chúng sẽ không phải là hàm tạo trong phiên bản tương lai của PHP; Gỡ cài đặt có trình hướng dẫn đồng không dùng nữa trong ... / Cài đặt / Gỡ cài đặt .php trên dòng 5
Pini
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.