Hàm tĩnh công khai tạo () trong các plugin để làm gì?


7

Đôi khi tôi gặp một hàm tạo hàm tĩnh công khai với các đối số trong các lớp plugin.

Ví dụ: tại đây https://www.sitepoint.com/tutorial-on-USE-drupal-8-plugin-derTHER-effectively/ chúng ta có thể thấy điều đó.

public static function create(ContainerInterface $container, $base_plugin_id) {
    return new static(
      $container->get('entity.manager')->getStorage('node')
    );
  }

Bạn có thể làm rõ cho tôi, các chức năng cho là gì? Nó nên làm gì và được sử dụng ở đâu?

Câu trả lời:


7

tạo () là một phương thức nhà máy để tiêm phụ thuộc.

Các plugin triển khai ContainerFactoryPluginInterfaceđược khởi tạo bởi create()lớp plugin:

ContainerFactory :: createdInstance

public function createInstance($plugin_id, array $configuration = []) {
  ...
  // If the plugin provides a factory method, pass the container to it.
  if (is_subclass_of($plugin_class, 'Drupal\Core\Plugin\ContainerFactoryPluginInterface')) {
    return $plugin_class::create(\Drupal::getContainer(), $configuration, $plugin_id, $plugin_definition);
  }

  // Otherwise, create the plugin directly.
  return new $plugin_class($configuration, $plugin_id, $plugin_definition);
}

5

Đó là phương pháp tĩnh mà lõi Drupal sử dụng để tạo plugin. (Xem, ví dụ, tài liệu cho SystemMenuBlock::create().)

Lõi Drupal không khởi tạo một plugin với new PluginClass(), nhưng PluginClass::create(). Điều này cho phép lớp thực hiện plugin trả về một thể hiện được tạo trước đó.
Một chuyên gia khác là chữ ký của các hàm tạo plugin có thể thay đổi mà không gây ra vấn đề gì với Drupal, vốn chỉ yêu cầu create()phương thức của một lớp bổ sung phải luôn có cùng chữ ký.

Đó là mô hình tương tự được sử dụng cho các dịch vụ Drupal.

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.