unb-libraries / custom-entity
一组Drupal模块,旨在简化使用自定义实体的工作。
This package is auto-updated.
Last update: 2024-09-25 13:18:36 UTC
README
一个改进与自定义实体一起工作的开发者体验的Drupal模块。
安装
该模块是托管在Packagist上的composer包,可以通过运行以下命令进行安装:
composer require unb-libraries/custom-entity
或者通过将其添加到您的项目中的composer.json
文件中。
{ "require": { "unb-libraries/custom-entity": "dev-9.x-1.x" } }
通过以下命令启用模块:
drush en custom_entity
或者通过Drupal UI中的/admin/modules
启用。
使用方法
该模块通过提供以下实现增强了Drupal:
访问处理器
Drupal\custom_entity\Entity\Access\EntityAccessControlHandler
动态地授予或拒绝实体访问权限,无论用户是否有<OPERATION> <ENTITY_TYPE> 实体
的权限。
例如,为了使用户能够编辑node
实体,用户需要分配edit node entities
权限。
为了激活访问控制处理器,将其设置在实体的类型定义中
<?php use Drupal\Core\Entity\ContentEntityBase; /** * Defines the "my_entity" entity type. * * @ContentEntityType( * ... * handlers = { * ... * "access" = "Drupal\custom_entity\Entity\Access\EntityAccessControlHandler" * }, * ... * ) */ class MyEntity extends ContentEntityBase { // ... }
目前处理器不支持包级别的权限检查。
权限处理器
权限处理器创建形式为 <OPERATION> (<BUNDLE>) <ENTITY_TYPE> 实体
的实体权限。按如下方式为实体类型添加权限处理器
<?php use Drupal\Core\Entity\ContentEntityBase; /** * Defines the "my_entity" entity type. * * @ContentEntityType( * ... * handlers = { * ... * "permissions" = "Drupal\custom_entity\Entity\Access\EntityPermissionsHandler" * }, * ... * ) */ class MyEntity extends ContentEntityBase { // ... }
扩展 Drupal\custom_entity\Entity\Access\EntityPermissionsHandler
类以创建更多定制权限。
路由处理器
Drupal\custom_entity\Entity\Routing\HtmlRouteProvider
通过为激活它的任何实体类型提供以下附加路由来增强Drupal默认的HtmlRouteProvider
entity.my_entity.delete-all
:创建一个表单路由来删除my_entity
的所有实例,如果定义了相应的delete-all
链接和表单处理器。entity.my_entity.<FORM_HANDLER>
:如果my_entity
定义了相应的链接,则创建一个给定表单处理器的表单路由。
以下定义了一个具有 entity.my_entity.delete-all
和 entity.my_entity.activate
路由的实体
<?php use Drupal\Core\Entity\ContentEntityBase; /** * Defines the "my_entity" entity type. * * @ContentEntityType( * ... * handlers = { * ... * "form" = { * "activate" = ... * "routing" = "Drupal\custom_entity\Entity\Routing\HtmlRouteProvider" * }, * ... * links = { * "activate": "/my-entities/{my_entity}/activate", * "delete-all-form": "/my-entities/delete-all", * } * ) */ class MyEntity extends ContentEntityBase { // ... }
字段类型
以下提供了新的实体字段类型
创建者
此字段类型将初始创建者的引用添加到实体中。按如下方式将此字段添加到实体中
<?php use Drupal\Core\Entity\ContentEntityBase; use Drupal\custom_entity\Entity\UserCreatedInterface; use Drupal\custom_entity\Entity\EntityCreatedTrait; /** * Defines the "my_entity" entity type. * * @ContentEntityType( * ... * ) */ class MyEntity extends ContentEntityBase implements UserCreatedInterface { use EntityCreatedTrait; /** * {@inheritdoc} */ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { $fields = parent::baseFieldDefinitions($entity_type); $fields[static::FIELD_CREATOR] = static::getCreatorBaseFieldDefinition($entity_type); return $fields; } }
编辑者
此字段类型将最近编辑实体的用户的引用添加到实体中。按如下方式将此字段添加到实体中
<?php use Drupal\Core\Entity\ContentEntityBase; use Drupal\custom_entity\Entity\UserEditedInterface; use Drupal\custom_entity\Entity\EntityChangedTrait; /** * Defines the "my_entity" entity type. * * @ContentEntityType( * ... * ) */ class MyEntity extends ContentEntityBase implements UserEditedInterface { use EntityChangedTrait; /** * {@inheritdoc} */ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { $fields = parent::baseFieldDefinitions($entity_type); $fields[static::FIELD_CREATOR] = static::getEditorBaseFieldDefinition($entity_type); return $fields; } }
表单
以下提供了基本表单
ConfigEntityForm
带有预配置的必需的id
和label
字段的配置实体基表单。如下使用:
<?php use Drupal\custom_entity\Form\ConfigEntityForm; /** * Form for "my_config_entity" entities. */ class MyConfigEntityForm extends ConfigEntityForm { /** * {@inheritDoc} */ public function buildForm(array $form, FormStateInterface $form_state) { $form = parent::buildForm($form, $form_state); // add additional form fields here. return $form; } }
ConfigEntityBundleForm
配置实体的基表单,这些实体是内容实体的包。在ConfigEntityForm
的基础上构建,它允许对包类进行额外配置。
服务
子模块
通过激活以下任何子模块,可以添加更多功能