プラグインクラスで引数を指定して関数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')
);
}
明確にしていただけませんか、機能は何ですか?それは何をすべきか、どこで使用されますか?
create()は依存関係注入のための factory method です。
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);
}
これは静的メソッドですDrupalコアがプラグインを作成するために使用します(たとえば、 SystemMenuBlock::create()
のドキュメントを参照してください)。
Drupalコアはnew PluginClass()
ではなくPluginClass::create()
でプラグインをインスタンス化しません。これにより、プラグインを実装するクラスは、以前に作成されたインスタンスを返すことができます。
他のproは、プラグインコンストラクターのシグネチャがDrupalに問題を与えることなく変更できることで、create()
常に同じ署名を持つプラグインのクラスのメソッド。
これは、Drupalサービスに使用されるパターンと同じです。