> drupal 8的魯棒插件系統,使後端開發人員具有可重複使用的功能。本文(兩個部分中的第一部分)詳細信息構建功能,啟用具有節點實體的自定義表單,從而允許節點束的配置與節點顯示旁邊使用各種形式類型。 通過擴展提供的基類可以輕鬆定義新的形式類型。 (有關完整的代碼示例,請參閱此存儲庫
)。>
本教程避免了深入的插件力學,假設對基本理論熟悉。我們將使用兩個接口和六個類構建自定義插件類型(看似大的數字,但大多是直截了當的樣板代碼。 第二部分將演示將這些可重複使用的形式附加到節點上。
> 密鑰概念:
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
>
)允許模塊修改插件定義,並配置了緩存後端。
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
>
>插件註釋:
)定義了插件屬性: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>,實現了
>。 使用註釋中指定的表單類實現PluginBase
和ReusableFormPluginInterface
。 form_builder
>
getName()
buildForm()
形式接口和基類:
> 一個簡單的表單接口(in
)和基類(inReusableFormInterface.php
>)是為了一致性而創建的:(這些在原始響應中顯示,並且在此處未重複此處) 。 /src/Form
ReusableFormBase.php
/src/Form
>結論(第1部分):
以上是Drupal 8自定義插件類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!