cari

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');
  }
}
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');
  }
}

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:

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
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
Penalaan prestasi PHP untuk laman web trafik yang tinggiPenalaan prestasi PHP untuk laman web trafik yang tinggiMay 14, 2025 am 12:13 AM

Thesecrettokeepingaphp-poweredwebsiterunningsmoothlyunderheavyloadinVolvesserVeSkeystrategies: 1) pelaksanaanPodeCachingWithopCachetoreduceScriptexecutionTime, 2) UsedataBasequerycachingWnithSoRessendataBaBAboad, 3)

Suntikan Ketergantungan dalam PHP: Contoh Kod untuk PemulaSuntikan Ketergantungan dalam PHP: Contoh Kod untuk PemulaMay 14, 2025 am 12:08 AM

Anda harus mengambil berat tentang kebergantungan (DI) kerana ia menjadikan kod anda lebih jelas dan lebih mudah untuk dikekalkan. 1) Di menjadikannya lebih modular dengan decoupling kelas, 2) meningkatkan kemudahan ujian dan fleksibiliti kod, 3) menggunakan bekas DI untuk menguruskan kebergantungan kompleks, tetapi memberi perhatian kepada kesan prestasi dan kebergantungan bulat, 4) Amalan terbaik adalah bergantung kepada antara muka abstrak untuk mencapai gandingan longgar.

Prestasi PHP: Adakah mungkin untuk mengoptimumkan aplikasi?Prestasi PHP: Adakah mungkin untuk mengoptimumkan aplikasi?May 14, 2025 am 12:04 AM

Ya, OptimizingaphpapplicationIspossibleandessential.1) pelaksanaanCachingUsingAputeDeducedeDataBaseload.2) OptimisedataTabaseseseshithindexing, eficientqueries, danConnectionPooling.3) EnhancecodeWithBuilt-Infungsi, EveringGlobalVariables

Pengoptimuman Prestasi PHP: Panduan TerbaikPengoptimuman Prestasi PHP: Panduan TerbaikMay 14, 2025 am 12:02 AM

ThekeystrategiestoSignificLantantlyboostphpapplicationperformanceare: 1) useopcodecachinglikLikeopcachetoreduceExecutionTime, 2) OptimizedataBaseInteractionsWithPreparedStatementsandProperindexing, 3) ConfigureWebserverserverLikenginxWithPmforbetterShipter.

Kontena Suntikan Ketergantungan PHP: Permulaan yang cepatKontena Suntikan Ketergantungan PHP: Permulaan yang cepatMay 13, 2025 am 12:11 AM

AphpdependencyInjectionContainerisatoLthatMatagesClassDependencies, EnhancingCodeModularity, Testability, andMaintainability.itactsascentralHubforcreatingandinjectingdependencies, sheReducingTightCouplingandeaseaseaseSunittesting.

Suntikan ketergantungan berbanding pencari perkhidmatan di phpSuntikan ketergantungan berbanding pencari perkhidmatan di phpMay 13, 2025 am 12:10 AM

Pilih DependencyInjection (DI) Untuk aplikasi besar, servicelocator sesuai untuk projek kecil atau prototaip. 1) DI meningkatkan kesesuaian dan modulariti kod melalui suntikan pembina. 2) ServiceLocator memperoleh perkhidmatan melalui pendaftaran pusat, yang mudah tetapi boleh menyebabkan peningkatan gandingan kod.

Strategi Pengoptimuman Prestasi PHP.Strategi Pengoptimuman Prestasi PHP.May 13, 2025 am 12:06 AM

Phpapplicationscanbeoptimizedforspeedandeficiencyby: 1) enablingopcacheinphp.ini, 2) menggunakan preparedSwithpdofordatabasequeries, 3) menggantikanloopswitharray_filterandarray_mapfordataprocessing, 4) configuringnginywinginywinyvinyvinginy

Pengesahan E -mel PHP: Memastikan e -mel dihantar dengan betulPengesahan E -mel PHP: Memastikan e -mel dihantar dengan betulMay 13, 2025 am 12:06 AM

PhpeMailvalidationInvolvestHreesteps: 1) formatValidationingRegularExpressionStocheckTheemailFormat; 2) dnsvalidationtoensurethedomainhasavalidmxrecord;

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Nordhold: Sistem Fusion, dijelaskan
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)