プラグインのパブリック静的関数create()とは何ですか?


7

プラグインクラスで引数を指定して関数public static function createに遭遇することがあります。

たとえば、ここhttps://www.sitepoint.com/tutorial-on-using-drupal-8-plugin-derivatives-effectively/ で確認できます。

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

明確にしていただけますか、機能は何ですか?それは何をすべきか、それはどこで使用されますか?

回答:


7

create()は、依存性注入のファクトリメソッドです。

実装するプラグインは、プラグインクラスContainerFactoryPluginInterfaceによってインスタンス化されcreate()ます。

ContainerFactory :: createInstance

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

これは、Drupalコアがプラグインの作成に使用する静的メソッドです。(たとえば、のドキュメントを参照してくださいSystemMenuBlock::create()。)

Drupalのコアが持つプラグインをインスタンス化しませんnew PluginClass()が、PluginClass::create()。これにより、プラグインを実装するクラスは、以前に作成されたインスタンスを返すことができます。
のプロは、プラグインのコンストラクタの署名がちょうど必要とDrupalのに問題を与えることなく変わることができるということですcreate()常に同じシグネチャを持つようにプラグインのクラスのメソッドを。

これは、Drupalサービスで使用されるパターンと同じです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.