sistem plugin drupal 8 yang kuat memberi kuasa kepada pemaju backend dengan fungsi yang boleh diguna semula. Artikel ini (bahagian satu daripada dua) butiran membina ciri yang membolehkan borang tersuai dengan entiti nod, yang membolehkan konfigurasi bundle nod untuk menggunakan pelbagai jenis bentuk di samping paparan nod. Jenis bentuk baru mudah ditakrifkan dengan memperluaskan kelas asas yang disediakan. (Untuk contoh kod lengkap, rujuk repositori ini ).
Konsep Utama:
form_builder
Plugin Manager:
Pengurus Plugin, penting untuk menemui dan memuatkan plugin, memanjangkan Drupal's. Di dalam direktori modul DefaultPluginManager
, /src
mengandungi: ReusableFormManager.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'); } }
, mengatasi pembina. Parameter utama menentukan: DefaultPluginManager
Plugin/ReusableForm
Drupalreusable_formsReusableFormPluginInterface
Drupalreusable_formsAnnotationReusableForm
) membolehkan modul untuk mengubah suai definisi plugin, dan backend cache dikonfigurasi. reusable_forms_info
Interface Plugin:
Antara muka ( dalam ReusableFormPluginInterface.php
) Menentukan kaedah semua plugin mesti dilaksanakan: /src
<?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'); } }
getName()
Mengembalikan nama plugin; buildForm()
menerima entiti dan mengembalikan array render untuk borang yang melaksanakan Drupalreusable_formsFormReusableFormInterface
. Ia meluas PluginInspectionInterface
dan ContainerFactoryPluginInterface
untuk suntikan fungsi dan ketergantungan tambahan.
Anotasi plugin:
Kelas Anotasi (ReusableForm.php
dalam /src/Annotation
) mentakrifkan sifat plugin:
<?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); }
id
, name
, dan form
(nama kelas bentuk yang berkelayakan) ditakrifkan di sini.
Kelas asas plugin:
kelas asas plugin (ReusableFormPluginBase.php
dalam /src
) menyediakan lalai:
<?php namespace Drupal\reusable_forms\Annotation; use Drupal\Component\Annotation\Plugin; /** * @Annotation */ class ReusableForm extends Plugin { public $id; public $name; public $form; }
Ini meluas PluginBase
, melaksanakan ReusableFormPluginInterface
, dan menggunakan suntikan ketergantungan untuk form_builder
. getName()
dan buildForm()
dilaksanakan, menggunakan kelas borang yang dinyatakan dalam anotasi.
Bentuk antara muka dan kelas asas:
dalam ReusableFormInterface.php
) dan kelas asas (/src/Form
dalam ReusableFormBase.php
) dicipta untuk konsistensi: (ini ditunjukkan dalam tindak balas asal, dan tidak diulangi di sini untuk keringkasan) . /src/Form
Kesimpulan (Bahagian 1):
Bahagian pertama ini menetapkan jenis plugin tersuai, menyediakannya untuk integrasi dengan kelas bentuk. Bahagian dua akan meliputi memaparkan borang ini dengan nod, yang melibatkan konfigurasi jenis nod dan bentuk rendering dalam mod paparan kandungan.Atas ialah kandungan terperinci Jenis plugin tersuai Drupal 8. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!