>本文探讨了Drupal 8的实体验证API及其对型数据验证的键入数据API的依赖,超出了Drupal 7基于表单的方法的局限性。 我们将研究该系统如何增强程序化数据处理并提高不同数据访问方法的一致性。
密钥概念:
FieldItemListInterface
Drupal 7在很大程度上依赖于API表格进行验证,这证明了程序化实体验证的繁琐。 重新实施验证逻辑或模拟表单提交效率低下,并将数据相互作用与表单系统紧密耦合。 Drupal 8中的REST API和其他程序化接口的出现需要更灵活的解决方案。 Drupal 8采用了Symfony验证组件,并在其基础上与键入数据和基于插件的实体系统集成。 这确保了所有交互方法的一致验证。
本文及其续集将深入研究Drupal 8实体验证API的实际应用和扩展。 我们将探索基本的键入数据API并提供代码示例(在此
了解键入的数据API:
>
>键入的数据API提供了用于数据交互的一致接口。 它的重要性在于定义并调用键入数据对象的验证。 关键组件包括:
>> datatype插件:
$definition = DataDefinition::create('string') ->addConstraint('Length', array('max' => 20)); $string_typed_data = \Drupal::typedDataManager()->create($definition, 'my string');
这将创建一个具有最大长度约束的字符串数据定义,然后使用TypedDataManager
插件实例。在此实例上的StringData
方法触发针对定义约束的验证,返回validate()
ConstraintViolationList
。
>键入数据和内容实体:
插件,每个插件都会扩展数据类型插件并使用FieldItemListInterface
>实现(通常FieldItem
)。
DataDefinitionInterface
FieldItemDataDefinition
添加约束:
约束是包含验证详细信息,错误消息和验证器选项的插件。 验证器类执行实际验证。 >
>实体级别约束:通过实体类中的注释添加。 示例:
修改实体约束,使用:
constraints = { "CommentName" = {} }
>字段级别的约束:hook_entity_type_alter()
方法取决于实体类型是自定义还是核心,以及该字段是基本还是可配置。 对于自定义实体类型,请在
function demo_entity_type_alter(array &$entity_types) { $node = $entity_types['node']; $node->addConstraint('ConstraintPluginName', ['array', 'of', 'options']); }
进行可配置的字段。 基本场的示例:
baseFieldDefinitions()
> hook_entity_base_field_info_alter()
结论和下一步: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]]); } }
(由于长度约束而提供的常见问题解答部分被省略,但可以集成为单独的部分。
以上是Drupal 8实体验证和键入数据解释了的详细内容。更多信息请关注PHP中文网其他相关文章!