PHP   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php – Symfony 2 – 如何在我自己的Yaml文件加载器中解析%parameter%?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个Yaml加载程序,可以为“配置文件”加载其他配置项(其中一个应用程序可以使用不同的配置文件,例如,对于同一站点的不同本地版本).

我的装载机非常简单:

# YamlProfileLoader.php

use Symfony\Component\Config\Loader\FileLoader;
use Symfony\Component\Yaml\Yaml;

class YamlProfileLoader extends FileLoader
{
    public function load($resource,$type = null)
    {
        $configValues = Yaml::parse($resourcE);
        return $configValues;
    }

    public function supports($resource,$type = null)
    {
        return is_String($resourcE) && 'yml' === pathinfo(
            $resource,PATHINFO_EXTENSION
        );
    }
}

加载器或多或少都是这样使用的(简化了一下,因为还有缓存):

$loaderResolver = new LoaderResolver(array(new YamlProfileLoader($locator)));
$delegaTingLoader = new DelegaTingLoader($loaderResolver);

foreach ($yamlProfileFiles as $yamlProfileFilE) {
    $profilename = basename($yamlProfileFile,'.yml');
    $profiles[$profilename] = $delegaTingLoader->load($yamlProfileFilE);
}

它解析的Yaml文件也是如此:

# profiles/geRMANy.yml

locale: de_DE
hostname: %profiles.geRMANy.host_name%

目前,结果数组包含’hostname’数组键的’%profiles.geRMANy.host_name%’.

那么,如何解析%参数以获取实际参数值?

我一直在浏览Symfony 2代码和文档(和this SO question并且无法在框架内找到这样做的地方.我可以编写自己的参数解析器 – 从内核中获取参数,搜索%foo %字符串和查找/替换…但如果有一个组件准备使用,我更喜欢使用它.

为了给出更多背景知识,为什么我不能将它包含在主config.yml中:我希望能够加载app / config / profiles / *.yml,其中*是配置文件名称,我正在使用我自己的Loader来实现这一目标.如果有一种通配符导入配置文件的方法,那么这对我也有用.

注意:目前正在使用2.4但只是准备好升级到2.5,如果这有帮助的话.

解决方法

Symfony的依赖注入组件使用编译器传递来在优化阶段解析参数引用.

Compiler从其PassConfig实例获取已注册的编译器传递.此类配置a few compiler passes by default,其中包括ResolveParameterPlaceHoldersPass.

在容器编译期间,ResolveParameterPlaceHoldersPass使用包含%parameters%的Container的ParameterBagresolve strings.然后,编译器传递将该已解析的值设置回容器中.

您需要访问ProfileLoader中的容器(或您认为合适的位置).使用容器,您可以递归迭代已解析的yaml配置,并将值传递到容器的参数包,以通过resolveValue()方法解析.

在我看来,或许更简洁的方法是在捆绑配置中实现这一点.这样,您的配置将根据定义的结构进行验证,该结构可以及早捕获配置错误.有关更多信息,请参阅bundle configuration上的文档(该链接适用于v2.7,但希望也适用于您的版本).

我意识到这是一个古老的问题,但我已经花了很长时间来为我自己的项目搞清楚这一点,所以我在这里发布答案以供将来参.

大佬总结

以上是大佬教程为你收集整理的php – Symfony 2 – 如何在我自己的Yaml文件加载器中解析%parameter%?全部内容,希望文章能够帮你解决php – Symfony 2 – 如何在我自己的Yaml文件加载器中解析%parameter%?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。