我试图通过将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"之前创建此参数。初始化?
答案 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()