$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