Symfony 3 - 如何在加载框架之前设置参数

时间:2016-11-15 21:39:57

标签: php dependency-injection symfony

我试图通过将version作为参数引入每个资产来解决Symfony 3中的Cache问题。我正在使用Assetic

# app/config/config.yml
parameters:
    version: 'v1.0'
framework:
    # ...
    assets:
        version: '%version%'

这很好用。但问题是,当我将一些版本部署到生产环境时,我必须每次手动编辑parameters.yml。所以每次部署发生时我都需要自动生成/更新它。

我能想到的一种方法是根据文件的最后一次更改生成MD5字符串。所以,让我们说如果我能够获得一个版本。我想用版本替换参数。

使用CompilerPass,我可以添加version参数。

//AppBundle/AppBundle.php

use AppBundle\DependencyInjection\Compiler\Version;

class AppBundle extends Bundle
{
    public function build(ContainerBuilder $container)
    {
        parent::build($container); // TODO: Change the autogenerated stub

        $container->addCompilerPass(new Version());
    }    
}




//AppBundle/DependencyInjection/Compiler/Version.php
namespace AppBundle\DependencyInjection\Compiler;


use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;

class Version implements CompilerPassInterface
{
    public function process(ContainerBuilder $container)
    {
        $container->setParameter('version', uniqid());

    }
}

uniqid()作为测试添加。但是,此代码可以工作并添加参数" version"但是后来"框架"配置已初始化。因此,%version%在"框架下#34;阻止状态,它找不到参数。

如何在" framework"之前创建此参数。初始化?

1 个答案:

答案 0 :(得分:1)

还可以在为每个分机调用private void putPageUnderRootAisleId()之前预先配置配置。见http://symfony.com/doc/current/components/dependency_injection/compilation.html#prepending-configuration-passed-to-the-extension

基本上,只需实施private void putPageUnderAisleId(null)并编写load()方法:

PrependExtensionInterface

顺便说一句,我前段时间通过检查最后一个提交ID(如果你不使用git只是忽略这个:)来做类似的事情):)

prepend()