如何将资产版本添加到css和js?

时间:2012-08-10 04:00:33

标签: php caching symfony twig assetic

我希望资产输出压缩的js和css到这样的东西: v2.3.1/css/whatever.css

目前,这就是我将css和js转储到生产的方式:$ php app/console assetic:dump --env=prod --no-debug。但它们被转储到css /和js /中,没有版本。

我看过this,但它似乎只是指图像,而不是css / js。

执行此操作的一个重要原因是缓存清除/失效。

3 个答案:

答案 0 :(得分:3)

是的,已知问题...在我们的制作工作流程中,我们最终在bin/vendors脚本中使用了这样的块:

if (in_array('--env=dev', $argv)) {
    system(sprintf('%s %s assets:install --symlink %s', $interpreter, escapeshellarg($rootDir . '/app/console'), escapeshellarg($rootDir . '/web/')));
    system(sprintf('%s %s assetic:dump --env=dev', $interpreter, escapeshellarg($rootDir . '/app/console')));
    system(sprintf('%s %s myVendor:assets:install --symlink ', $interpreter, escapeshellarg($rootDir . '/app/console')));
} else {
    system(sprintf('%s %s assets:install %s', $interpreter, escapeshellarg($rootDir . '/app/console'), escapeshellarg($rootDir . '/web/')));
    system(sprintf('%s %s assetic:dump --env=prod --no-debug', $interpreter, escapeshellarg($rootDir . '/app/console')));
    system(sprintf('%s %s myVendor:assets:install ', $interpreter, escapeshellarg($rootDir . '/app/console')));
}

如您所见,我们定义了我们的控制台命令,该命令在安装和转储Symfony的资产后将资产安装到Web文件夹中。在MyVendorCommand脚本中,我们执行以下操作:

$version = $this->getContainer()->getParameter('your_version_parameter');
$assetsInstallCommand = $this->getApplication()->find('assets:install');

$commandOptions = $input->getOptions();

$assetsInstallArguments = array(
    'command' => 'assets:install',
    'target' => 'web/version-' . $version,
    '--symlink' => $commandOptions['symlink']
);

$assetsInstallInput = new ArrayInput($assetsInstallArguments);
$returnCode = $assetsInstallCommand->run($assetsInstallInput, $output);

答案 1 :(得分:1)

何,这是一个很大的Symfony2漏洞!我不确定有人报道过它!

我的解决方案是在Nginx配置中添加一个别名,但你的是def。清洁与清洁更好。

答案 2 :(得分:0)

我的解决方法是在.htaccess文件中创建一个rewriteRule,以便提供真实文件,但接受带有版本号的完整URL。像这样......

的应用程序/配置/ config.yml

[...]
engines: ['twig']
assets_version: 20140523  # numeric version
assets_version_format: "assets-%%2$s/%%1$s"
[...]

网/ htaccess的

[...]
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^assets-([0-9]*)/(.*)$ ./$2 [L]
[...]