“中国要复兴、富强,必须在开源软件领域起到主导作用,为了国家安全和人类发展,责无旁贷,我们须为此而奋斗”——By:云客
该服务为实体类型操作提供辅助方法,这些方法不适合划归到其他组件中,服务定义如下:
服务id:entity_type.repository
类:\Drupal\Core\Entity\EntityTypeRepository
接口:\Drupal\Core\Entity\EntityTypeRepositoryInterface
获取方法:$entity_type_repository = \Drupal::service('entity_type.repository');
目前提供了两个辅助方法:
public function getEntityTypeLabels($group = FALSE):
返回系统中全部实体的label,通常用于向相关表单下拉选择框提供选项值,默认返回一个数组,键名是实体类型id,键值为翻译对象表示的label,如果参数$group设置为true,那么第一级键名为分组名,默认只有内容和配置两个组(在释文对象中有补充组信息),第二级键名为实体类型id,键值为翻译对象表示的label,可以在控制器中运行以下代码:
$group_labels = \Drupal::service('entity_type.repository')->getEntityTypeLabels(true);
foreach ($group_labels as $group => &$labels) {
foreach ($labels as &$label) {
$label = (string)$label;
}
}
print_r($group_labels);
die;
将输出以下内容:
Array
(
[内容] => Array
(
[node] => 内容
[taxonomy_term] => 分类术语
[menu_link_content] => 定制菜单链接
[shortcut] => 快捷方式链接
[file] => 文件
[user] => 用户
[contact_message] => 联系信息
[block_content] => 自定义区块
[comment] => 评论
)
[配置] => Array
(
[rdf_mapping] => RDF mapping
[node_type] => 内容类型
[language_content_settings] => 内容语言设置
[taxonomy_vocabulary] => 分类词汇表
[action] => 动作
[block] => 区块
[image_style] => 图像样式
[base_field_override] => 基字段覆盖
[field_config] => 字段
[field_storage_config] => 字段存储
[entity_form_display] => 实体表单显示
[entity_view_display] => 实体视图显示
[shortcut_set] => 快捷方式组
[search_page] => 搜索页面
[filter_format] => 文本格式
[editor] => 文本编辑器
[date_format] => 日期格式
[entity_view_mode] => 查看模式
[tour] => 界面导览
[contact_form] => 联络表单
[block_content_type] => 自定义区块类型
[menu] => 菜单
[entity_form_mode] => 表单模式
[view] => 视图
[user_role] => 角色
[comment_type] => 评论类型
[configurable_language] => 语言
)
)
public function getEntityTypeFromClass($class_name):
根据实体类的类名找到实体类型id,在直接使用实体类的以下这些静态方法时:
load($id)、loadMultiple(array $ids = NULL)、create(array $values = [])
并未提供实体类型id,但这是取得实体储存器的关键,此时可以用该辅助方法通过实体类的类名推断出实体类型id,传入的参数应该是全限定类名,如:
“Drupal\yunke_help\Controller\Test”
不带前后“\”,这通常由php函数get_called_class()提供
在内部将提供的类名和实体类型管理器中取得的实体类型定义中的类名逐一对比,注意其使用“==”而不是instanceof运算符或is_subclass_of函数,因为在这种子类情况时,定义中应该是已经被修改过
如果同一个类被推断出多个实体类型id,将抛出异常,没有找到也会抛出异常
clearCachedDefinitions():
清除内部静态缓存,已弃用,在D9时移除
反馈互动