我正在将一个模块从Drupal 7移植到Drupal8。在该模块的配置设置中,我需要获取当前现有字段类型的列表。
在Drupal 7中,这是使用field_info_field_types()
函数实现的。
在Drupal 8(8.0.0-rc3)中,尽管出现了Drupal API参考帮助页面中指出的信息,但仍然过时,但出现了“功能不存在”错误。
然后进行调查,我发现了DrupalContrib页面,该函数被声明为已弃用,并建议现在使用Drupal::service('plugin.manager.entity.field.field_type')->getDefinitions()
。
但是使用它会引发另一个错误“未知服务plugin.manager.entity.field.field_type”,所幸与建议“您是说plugin.manager.field.field_type吗?”相关联
所以我尝试使用Drupal::service('plugin.manager.field.field_type')->getDefinitions()
并哇:我得到了预期的字段类型数组。
但是,每个数组成员(一个字段类型)现在都是一个对象(而不是子数组),并且我要查找的数据嵌套在受保护的属性中,因此我无法访问它们。
在这个阶段,我被困住了。我认为它可能存在一些可以扩展以浏览这些数据的类,但是没有运气:我尤其无法弄清楚Drupal 8中的哪个组件是字段类型定义集中的组件。