Plugin Manager

Các Plugin Manager rất giống với Service Manager (thực tế đối tượng Plugin Manager kế thừa ServiceManager - nên có cóc các phương thức sử dụng như đã tìm hiểu ở SM như has, get và cách cấu hình tương tự services, invokables, factories, abstract_factories), nó là tập hợp các đối tượng lớp (mỗi lớp một đối tượng). Plugin Manager tùy thuộc vào loại, cơ bản nó là mở rộng các chức năng cho các thành phần của ứng dụng.

Trong Zend Framework có các Plugin Manager mà dần dần ta sẽ tìm hiểu gồm:

  • controllers (Zend\Mvc\Controller\ControllerManager)
  • controller plugins (Zend\Mvc\Controller\PluginManager)
  • view helpers (Zend\View\HelperPluginManager)
  • form elements (Zend\Form\FormElementManager\FormElementManager)
  • filters (Zend\Filter\FilterPluginManager)
  • validators (Zend\Validator\ValidatorPluginManager)
  • và nhiều thành phần khác nữa ...

Các Plugin Manager này cũng được Service Manager quản lý chung, có được SM sẽ lấy được Plugin Manager mong muốn ví dụ: $servicemanager->get(Zend\Filter\FilterPluginManager:class);

Nếu muốn tạo ra các Plugin Manager riêng, thì bạn tạo ra một lớp kế thừa AbstractPluginManager

use Zend\ServiceManager\AbstractPluginManager;

class MyPluginManager extends AbstractPluginManager {
    protected $instanceOf = 'Name Class Or Interface';
    //...
}

Trong đó luôn có thuộc tính $instanceOf chỉ ra tên lớp, hoặc interface mà mọi đối tượng Plugin có tương thích kiểu.

Thường Plugin Manager sẽ tự động kiểm tra các Plugin đưa vào, nếu không phù hợp sẽ phát sinh Exception : Zend\ServiceManager\Exception\InvalidServiceException

Nhu cầu sử dụng thông thường khai báo thế là đủ, tuy nhiên cần có kiểm tra phức tạp hơn bạn chỉ việc nạp chồng validate

use Zend\ServiceManager\AbstractPluginManager;

class MyPluginManager extends AbstractPluginManager
{
    protected $instanceOf = 'Name Class Or Interface';

    public function validate($instance)
    {
        if ($instance instanceof Foo || $instance instanceof Bar) {
        return;
        }

        throw new InvalidServiceException('This is not a valid service!');
    }
}
Đăng ký theo dõi ủng hộ kênh