ホームページ >バックエンド開発 >PHPチュートリアル >Drupal 8カスタムプラグインタイプ

Drupal 8カスタムプラグインタイプ

Joseph Gordon-Levitt
Joseph Gordon-Levittオリジナル
2025-02-16 10:15:10186ブラウズ

Drupal 8の堅牢なプラグインシステムは、再利用可能な機能を備えたバックエンド開発者に力を与えます。この記事(2つのパート1の1つ)は、ノードエンティティを使用してカスタムフォームを有効にする機能を構築し、ノードバンドルの構成がノードディスプレイとともにさまざまなフォームタイプを利用できるようにします。 新しいフォームタイプは、提供されたベースクラスを拡張することで簡単に定義できます。 (完全なコードの例については、このリポジトリを参照してください)。

Drupal 8 Custom Plugin Types

このチュートリアルは、基礎となる理論に精通していると仮定して、詳細なプラグインメカニクスを回避します。 2つのインターフェイスと6つのクラスを使用して、カスタムプラグインタイプを構築します。 パート2では、これらの再利用可能なフォームをノードに添付することを示します。

重要な概念:

Drupal 8のプラグインシステムは、再利用可能な機能を促進し、ノードエンティティのカスタムフォームを有効にします。 ノードバンドルは、ノードディスプレイ内の複数のフォームタイプを使用するように構成できます。 プラグインマネージャーは、プラグインの発見と読み込みに不可欠なプラグインマネージャーであり、簡単な拡張機能のためにDrupalのデフォルトのベースクラスを活用します。 すべてのプラグインは、定義されたインターフェイスを実装する必要があります
    プラグインの定義は、重要な情報を含む注釈を利用します:プラグインサブディレクトリ、必要なインターフェイス、およびプラグインプロパティを定義するアノテーションクラス。
  • カスタムプラグインタイプには、すべてのプラグインによって拡張可能なベースクラスが必要です。このクラスは、インターフェイスを実装し、フォーム構造に不可欠な
  • サービスに依存関係注入を使用します。 プラグインはフォームクラスと対話します。次のステップは、これらのフォームをノードディスプレイと統合することです。
  • プラグインマネージャー:
  • プラグインマネージャーは、プラグインを発見してロードするために重要なプラグインマネージャーが、Drupalのform_builderを拡張します。 モジュールの
  • >ディレクトリ内で、
contas:

これにより

が拡張され、コンストラクターがオーバーライドされます。 キーパラメーターが定義します:

DefaultPluginManager /srcReusableFormManager.php:プラグインサブディレクトリ。

<code class="language-php"><?php namespace Drupal\reusable_forms;

use Drupal\Core\Plugin\DefaultPluginManager;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;

class ReusableFormsManager extends DefaultPluginManager {

  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) {
    parent::__construct('Plugin/ReusableForm', $namespaces, $module_handler, 'Drupal\reusable_forms\ReusableFormPluginInterface', 'Drupal\reusable_forms\Annotation\ReusableForm');
    $this->alterInfo('reusable_forms_info');
    $this->setCacheBackend($cache_backend, 'reusable_forms');
  }
}</code>

:必要なプラグインインターフェイス。DefaultPluginManager

    :プラグインのプロパティを定義する注釈クラス
  • Plugin/ReusableForm
  • Alter Hook()を使用すると、モジュールがプラグインの定義を変更でき、キャッシュバックエンドが構成されています。
  • Drupalreusable_formsReusableFormPluginInterfaceプラグインインターフェイス:
  • Drupalreusable_formsAnnotationReusableFormインターフェイス(
  • in
)は、すべてのプラグインが実装する必要があるメソッドを定義します。
<code class="language-php"><?php namespace Drupal\reusable_forms;

use Drupal\Core\Plugin\DefaultPluginManager;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;

class ReusableFormsManager extends DefaultPluginManager {

  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) {
    parent::__construct('Plugin/ReusableForm', $namespaces, $module_handler, 'Drupal\reusable_forms\ReusableFormPluginInterface', 'Drupal\reusable_forms\Annotation\ReusableForm');
    $this->alterInfo('reusable_forms_info');
    $this->setCacheBackend($cache_backend, 'reusable_forms');
  }
}</code>

getName()プラグイン名を返します。 buildForm()エンティティを受け入れ、Drupalreusable_formsFormReusableFormInterfaceを実装するフォームのレンダリング配列を返します。 機能と依存関係のインジェクションを追加するためにPluginInspectionInterfaceおよびContainerFactoryPluginInterfaceを拡張します。

プラグインアノテーション:

アノテーションクラス(

inReusableForm.php)は、プラグインプロパティを定義します /src/Annotation

<code class="language-php"><?php
namespace Drupal\reusable_forms;

use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Component\Plugin\PluginInspectionInterface;

interface ReusableFormPluginInterface extends PluginInspectionInterface, ContainerFactoryPluginInterface {

  public function getName();

  public function buildForm($entity);
}</code>

、およびid(完全に資格のあるフォームクラス名)はここで定義されています。 nameformプラグインベースクラス:

プラグインベースクラス(in

)はデフォルトを提供します:

ReusableFormPluginBase.php /srcこれは

を拡張し、
<code class="language-php"><?php
namespace Drupal\reusable_forms\Annotation;

use Drupal\Component\Annotation\Plugin;

/**
 * @Annotation
 */
class ReusableForm extends Plugin {

  public $id;
  public $name;
  public $form;
}</code>
を実装し、

の依存関係注射を使用します。 アノテーションで指定されたフォームクラスを使用して、PluginBaseおよびReusableFormPluginInterfaceが実装されています。 form_buildergetName()フォームインターフェイスとベースクラス:buildForm()

simple formインターフェイス(

in)およびベースクラス(in

)は、一貫性のために作成されます:(これらは元の応答で表示され、ここではbrevityのために繰り返されません) 。

ReusableFormInterface.php/src/Form結論(パート1):ReusableFormBase.php/src/Form

この最初の部分は、カスタムプラグインタイプをセットアップし、フォームクラスとの統合のために準備します。 パート2では、ノードタイプの構成とコンテンツビューモード内のフォームレンダリングを含むノードでこれらのフォームの表示を取り上げます。

以上がDrupal 8カスタムプラグインタイプの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。