Artikel ini meneroka API Pengesahan Entiti Drupal 8 dan pergantungannya pada API data yang ditaip untuk pengesahan data yang mantap, bergerak melampaui batasan pendekatan berasaskan bentuk Drupal 7. Kami akan mengkaji bagaimana sistem ini meningkatkan pengendalian data programatik dan meningkatkan konsistensi merentasi kaedah akses data yang berbeza.
Konsep Utama:
FieldItemListInterface
Drupal 7 sangat bergantung pada API bentuk untuk pengesahan, yang membuktikan rumit untuk pengesahan entiti programatik. Menambah semula logik pengesahan atau penyerahan bentuk simulasi tidak cekap dan ketat digabungkan dengan interaksi data dengan sistem borang. Kemunculan API REST dan antara muka programatik lain di Drupal 8 memerlukan penyelesaian yang lebih fleksibel. Drupal 8 mengguna pakai komponen pengesahan Symfony, membina ke atasnya untuk mengintegrasikan dengan data yang ditaip dan sistem entiti berasaskan plugin. Ini memastikan pengesahan yang konsisten merentas semua kaedah interaksi.
Artikel ini dan sekuelnya akan menyelidiki aplikasi praktikal dan lanjutan API Pengesahan Entiti Drupal 8. Kami akan meneroka API data yang ditaip yang mendasari dan memberikan contoh kod (tersedia dalam modul demo dalam repositori git ini
Memahami API Data yang Diketik:
API data yang ditaip menawarkan antara muka yang konsisten untuk interaksi data. Kepentingannya terletak pada menentukan dan menggunakan pengesahan pada objek data yang ditaip. Komponen utama termasuk:
Definisi data:
$definition = DataDefinition::create('string') ->addConstraint('Length', array('max' => 20)); $string_typed_data = \Drupal::typedDataManager()->create($definition, 'my string');
Ini mewujudkan definisi data rentetan dengan kekangan panjang maksimum dan kemudian menggunakan TypedDataManager
untuk membuat contoh plugin StringData
. Kaedah validate()
pada contoh ini mencetuskan pengesahan terhadap kekangan yang ditetapkan, mengembalikan ConstraintViolationList
.
Data dan entiti kandungan yang ditaip:
Drupal 8 mengintegrasikan sifat entiti dan medan API medan. Walaupun sesetengah bidang adalah medan asas (pada dasarnya sifat entiti lama), yang lain boleh dikonfigurasikan. Setiap medan menggunakan pelaksanaan FieldItemListInterface
untuk menguruskan data, biasanya mengandungi FieldItem
plugin, masing -masing memanjangkan plugin datatype dan menggunakan pelaksanaan DataDefinitionInterface
(sering FieldItemDataDefinition
).
Menambah kekangan:
Kekangan adalah plugin yang mengandungi butiran pengesahan, mesej ralat, dan pilihan validator. Kelas Validator melakukan pengesahan sebenar.
kekangan tahap entiti: ditambah melalui anotasi dalam kelas entiti. Contoh:
constraints = { "CommentName" = {} }
: hook_entity_type_alter()
function demo_entity_type_alter(array &$entity_types) { $node = $entity_types['node']; $node->addConstraint('ConstraintPluginName', ['array', 'of', 'options']); }
Kekangan peringkat medan: Kaedah bergantung kepada sama ada jenis entiti adalah adat atau teras, dan sama ada medan itu adalah asas atau boleh dikonfigurasikan. Untuk jenis entiti tersuai, tambahkan kekangan dalam . Untuk jenis entiti yang sedia ada, gunakan baseFieldDefinitions()
untuk medan asas dan hook_entity_base_field_info_alter()
untuk medan yang boleh dikonfigurasikan. Contoh untuk medan asas: hook_entity_bundle_field_info_alter()
function demo_entity_base_field_info_alter(&$fields, EntityTypeInterface $entity_type) { if ($entity_type->id() === 'node') { $title = $fields['title']; $title->addPropertyConstraints('value', ['Length' => ['max' => 5]]); } }
Kesimpulan dan langkah seterusnya:
Artikel ini memberikan pemahaman asas mengenai pengesahan entiti Drupal 8 dan API data yang ditaip. Bahagian seterusnya akan menyelidiki proses pengesahan itu sendiri, mengendalikan pelanggaran, dan mewujudkan kekangan dan pengesahan tersuai.
(bahagian FAQ yang disediakan ditinggalkan di sini kerana kekangan panjang, tetapi ia boleh diintegrasikan sebagai bahagian yang berasingan.)
Atas ialah kandungan terperinci Drupal 8 Pengesahan Entiti dan Data Ditaip dijelaskan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!