Rumah > pembangunan bahagian belakang > tutorial php > Jenis plugin tersuai Drupal 8

Jenis plugin tersuai Drupal 8

Joseph Gordon-Levitt
Lepaskan: 2025-02-16 10:15:10
asal
194 orang telah melayarinya

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 ).

Drupal 8 Custom Plugin Types

Tutorial ini mengelakkan mekanik plugin mendalam, dengan mengandaikan kebiasaan dengan teori yang mendasari. Kami akan membina jenis plugin tersuai kami menggunakan dua antara muka dan enam kelas -jumlah yang kelihatan besar, tetapi kebanyakannya kod boilerplate yang mudah. Bahagian dua akan menunjukkan melampirkan bentuk yang boleh diguna semula ini kepada nod.

Konsep Utama:

    sistem plugin Drupal 8 memudahkan fungsi yang boleh diguna semula, membolehkan borang tersuai untuk entiti nod. Bundle node boleh dikonfigurasikan untuk menggunakan pelbagai jenis bentuk dalam paparan nod.
  • Pengurus Plugin, penting untuk penemuan dan pemuatan plugin, memanfaatkan kelas asas lalai Drupal untuk lanjutan mudah. Semua plugin mesti melaksanakan antara muka yang ditetapkan.
  • Definisi plugin menggunakan anotasi yang mengandungi maklumat penting: subdirektori plugin, antara muka yang diperlukan, dan kelas anotasi yang menentukan sifat plugin.
  • Jenis plugin tersuai memerlukan kelas asas yang boleh diperluaskan oleh semua plugin. Kelas ini melaksanakan antara muka dan menggunakan suntikan ketergantungan untuk perkhidmatan
  • , penting untuk pembinaan bentuk. Plugin berinteraksi dengan kelas bentuk; Langkah seterusnya adalah mengintegrasikan borang ini dengan paparan nod. 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');
  }
}
Salin selepas log masuk
Salin selepas log masuk
Ini meluas

, mengatasi pembina. Parameter utama menentukan: DefaultPluginManager

  • : subdirectory plugin. Plugin/ReusableForm
  • : Antara muka plugin yang diperlukan. Drupalreusable_formsReusableFormPluginInterface
  • : Kelas Anotasi Menentukan sifat plugin. Drupalreusable_formsAnnotationReusableForm
cangkuk alter (

) 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');
  }
}
Salin selepas log masuk
Salin selepas log masuk

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);
}
Salin selepas log masuk

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;
}
Salin selepas log masuk

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:

antara muka bentuk mudah (

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan