首頁 >後端開發 >php教程 >Drupal 8自定義插件類型

Drupal 8自定義插件類型

Joseph Gordon-Levitt
Joseph Gordon-Levitt原創
2025-02-16 10:15:10186瀏覽

> drupal 8的魯棒插件系統,使後端開發人員具有可重複使用的功能。本文(兩個部分中的第一部分)詳細信息構建功能,啟用具有節點實體的自定義表單,從而允許節點束的配置與節點顯示旁邊使用各種形式類型。 通過擴展提供的基類可以輕鬆定義新的形式類型。 (有關完整的代碼示例,請參閱此存儲庫

)。

> Drupal 8 Custom Plugin Types

本教程避免了深入的插件力學,假設對基本理論熟悉。我們將使用兩個接口和六個類構建自定義插件類型(看似大的數字,但大多是直截了當的樣板代碼。 第二部分將演示將這些可重複使用的形式附加到節點上。

> 密鑰概念:

  • > Drupal 8的插件系統促進可重複使用的功能,為節點實體啟用自定義表單。 可以將節點捆綁包配置為在節點顯示內使用多個表單類型。
  • >插件管理器,對於插件發現和加載必不可少的,利用Drupal的默認基類以易於擴展。 所有插件都必須實現定義的接口。
  • >插件定義使用包含關鍵信息的註釋:插件子目錄,所需界面和定義插件屬性的註釋類。
  • >自定義插件類型需要所有插件可擴展的基類。該類實現界面,並使用依賴注入
  • 服務,對於形式結構必不可少。 該插件與表單類交互;下一步是將這些表單與節點顯示。 form_builder>

>插件管理器:>

插件管理器,對於發現和加載插件至關重要,它擴展了Drupal的

。 在模塊的DefaultPluginManager目錄中,/src>包含:ReusableFormManager.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
  • :必需的插件接口。 Drupalreusable_formsReusableFormPluginInterface
  • :定義插件屬性的註釋類。 Drupalreusable_formsAnnotationReusableForm>
一個Alter Hook(

)允許模塊修改插件定義,並配置了緩存後端。 reusable_forms_info

插件接口:

接口(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>

>插件註釋: 註釋類(

in

)定義了插件屬性:ReusableForm.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(完全限定的表單名稱)在此處定義。 name> form

>插件基類:

插件base類(

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>
,實現了,並使用依賴性注入

>。 使用註釋中指定的表單類實現PluginBaseReusableFormPluginInterfaceform_builder> getName() buildForm()形式接口和基類:

> 一個簡單的表單接口(in

)和基類(

inReusableFormInterface.php>)是為了一致性而創建的:(這些在原始響應中顯示,並且在此處未重複此處) 。 /src/Form ReusableFormBase.php/src/Form>結論(第1部分):>

>這第一部分設置了自定義插件類型,並準備將其與表單類集成。 第二部分將涵蓋用節點顯示這些表格,涉及節點類型的配置並在內容視圖模式中呈現形式。

以上是Drupal 8自定義插件類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn