Hỗ trợ plugin đơn giản nhất – Stitcher.io

  • Post category:lập trình


Hỗ trợ plugin của Stitcher có sẵn kể từ Stitcher 1.0.0-alpha5.

Trong bài đăng này, bạn sẽ đọc về hệ thống plugin của Stitcher. Nó có thể hơi mang tính kỹ thuật nhưng chắc chắn đáng đọc.

Các plugin Stitcher được xây dựng dựa trên hai thành phần mạnh mẽ đã tồn tại trong nhiều dự án hiện đại.

  • Tự động tải của nhà soạn nhạc
  • Vùng chứa dịch vụ của Symfony

Khi sử dụng hai thành phần này, một plugin không khác gì một gói soạn thảo, yêu cầu Stitcher bổ sung các lớp và tham số riêng vào các dịch vụ hiện có. Đó là một khái niệm cực kỳ đơn giản và nó hoạt động như một cơ duyên. Giống như hầu hết mọi thứ trong Stitcher: càng đơn giản thì càng tốt. Chúng ta hãy xem một ví dụ.

#Plugin của tôi

Cấu trúc thư mục của plugin có thể trông như thế này.

MyPlugin/
	├── src/
	│   ├── My/
	│   │    ├── MyPlugin.php
	│   │    └── Service.php
	├── config.yml
	├── services.yml
	├── composer.json
	└── README.md

Yêu cầu duy nhất để một gói trở thành “plugin” là một lớp triển khai Brendt\Stitcher\Plugin\Plugin giao diện. Trong ví dụ này, đó sẽ là My\MyPlugin. Khi lớp này có thể được tự động tải bằng trình soạn thảo, plugin của bạn đã sẵn sàng!

#Giao diện plugin

Các Plugin giao diện yêu cầu bạn chỉ thực hiện ba phương pháp. Những phương pháp này cho Stitcher biết vị trí services.ymlconfig.yml các tập tin được định vị và cách khởi tạo plugin. Bất kỳ ràng buộc nào khác với Stitcher đều được thực hiện thông qua vùng chứa dịch vụ.

namespace My;

use Brendt\Stitcher\Plugin\Plugin;

class MyPlugin implements Plugin
{
    public function init() {
        return;
    }

    public function getConfigPath() {
        return __DIR__ . '/plugin.config.yml';
    }

    public function getServicesPath() {
        return __DIR__ . '/plugin.services.yml';
    }
}

# init phương pháp

Các init phương thức được gọi sau khi tất cả cấu hình plugin được tải. Phương pháp này có thể được sử dụng như một cái móc để thêm cấu hình plugin vào các dịch vụ hiện có. Một ví dụ sẽ là thêm lệnh vào ứng dụng bảng điều khiển.


public function init() {
    
    $console = App::get('app.console');

    $console->add(App::get('my.plugin.command.my.cmd'));
}

# plugin.config.yml

Tên không quan trọng miễn là nó là tệp yaml. Tệp này hoạt động giống hệt như các tệp cấu hình khác: các cặp khóa-giá trị có thể được thêm vào và sẽ có sẵn dưới dạng tham số trong vùng chứa dịch vụ. Các khóa có thể được lồng vào nhau nhưng sẽ bị phẳng khi được tải. Một điều cần lưu ý là plugin không thể ghi đè các tham số hiện có.

Tất nhiên, các tham số plugin của bạn có thể được ghi đè từ trong dự án Stitcher.



my.plugin:
    parameter: test

# plugin.services.yml

Một lần nữa, tên không quan trọng, nhưng phần tử gốc phải được đặt tên services theo yêu cầu của Symfony. Bạn cũng có thể thêm parameters đây.



services:
    my.plugin.my.service:
        class: My\Service
        arguments: ('%my.plugin.parameter%', '%directories.src%', '@stitcher')

Như bạn có thể thấy, các dịch vụ và thông số của Stitcher đều có sẵn cũng như của riêng bạn.

# Đang tải plugin

Cuối cùng, một plugin phải được tải vào dự án của bạn để nó hoạt động. Các plugins tham số trong tệp cấu hình dự án của bạn được sử dụng để thực hiện điều đó.



plugins:
    - My\MyPlugin

Đó là nó!

#Tiềm năng tương lai

Hệ thống plugin này rất đơn giản nhưng nó mở ra khả năng thêm tất cả các loại chức năng vào dự án Stitcher. Đó là một bước quan trọng hướng tới một số ý tưởng của riêng tôi; chủ đề tùy chỉnh và các ứng dụng khác (API và CMS); và chúng ta sẽ khám phá thêm sức mạnh thực sự của nó trong tương lai.

Điều quan trọng nhất đối với tôi là sự đơn giản của nó. Khi xem xét hệ thống plugin trong các ứng dụng khác, bạn sẽ thường thấy các thiết lập phức tạp như cấu trúc thư mục ảo, trình tải plugin tùy chỉnh, quy ước đặt tên tệp không rõ ràng, trình quản lý gói riêng, v.v. Tôi muốn sử dụng các công nghệ hiện có và đã được chứng minh để xây dựng trên đó bật và giữ cho hệ thống sạch sẽ nhất có thể. Tôi tin rằng cách tiếp cận này là một bước đi đúng hướng.



Trả lời