$typedConfigManager = \Drupal::service("config.typed");
//获取类型化配置管理器
$name = "system.site";
//示例一个配置对象
$data = \Drupal::configFactory()->getEditable($name)->getRawData();
//实时获取配置对象中储存的数据,配置对象如果被修改,得到的是修改后的值
$definition = $typedConfigManager->getDefinition($name);
//得到配置类型的插件定义,也就是schema配置文件中的内容,但经过递归合并,暂未处理动态类型
$data_definition = $typedConfigManager->buildDataDefinition($definition, $data);
//构建返回类型化数据对象的定义对象,因为schema定义中type属性允许动态内容
//(如[%parent.%parent.%type].third_party.[%key]),所以需要传递配置对象的数据参数
$typed_data = $typedConfigManager->create($data_definition, $data);
//创建类型化对象,最终我们得到了一个类型化配置数据对象
$typedConfigManager = \Drupal::service("config.typed");
//获取类型化配置管理器
$name = "system.site";
//示例一个配置对象
$typed_data = $typedConfigManager->get($name);
//从类型化配置管理器中直接获取配置对象的类型化数据对象,但配置值是来自配置储存服务的
$typedConfigManager=\Drupal::service("config.typed");
$definition=$typedConfigManager->getDefinition("config_entity");
print_r($definition);
exit();
Array
(
[label] => Mapping
[class] => Drupal\Core\Config\Schema\Mapping
[definition_class] => \Drupal\Core\TypedData\MapDataDefinition
[mapping] => Array
(
[uuid] => Array
(
[type] => string
[label] => UUID
)
[langcode] => Array
(
[type] => string
[label] => Language code
)
[status] => Array
(
[type] => boolean
[label] => Status
)
[dependencies] => Array
(
[type] => config_dependencies
[label] => Dependencies
)
[third_party_settings] => Array
(
[type] => sequence
[label] => Third party settings
[sequence] => Array
(
[type] => [%parent.%parent.%type].third_party.[%key]
)
)
[_core] => Array
(
[type] => _core_config_info
)
)
[type] => config_entity
)
他们只是代表的意义不同,如字面意思,一个代表未定义,一个代表忽略不考虑类型,但是实现上完全相同,因此使用方法均相同;设置ignore类型在有些情况下很有用,比如在验证schema定义有效性时,如果是未定义,表示schema定义不通过,需要更正,如果明确指出是ignore类型那么验证将通过
本篇就介绍到这里,以后的主题中还将陆续介绍配置安装、导入、比较等,配置系统很大,和其他组件有机结合,之后介绍的主题涉及配置内容时标题不再专门用配置系统编号,如是专门介绍配置系统某块内容仍然以本篇标题的形式递增序号,目前已介绍的内容足够理解实体配置,下篇将结合实体系统,介绍配置实体方面的内容。
为了阅读内容时已经具备前备知识,请按本系列主题的发布顺序跟随阅读
我是云客,【云游天下,做客四方】,微信号:PHP-world,欢迎转载,但须注明出处,讨论请加qq群203286137