Как добавить версию активов в css и js?

Я хочу, чтобы assetic выводил сжатые js и css примерно так: v2.3.1/css/whatever.css

В настоящее время я пишу свои css и js для производства: $ php app/console assetic:dump --env=prod --no-debug . Но они сбрасываются в css / и js /, без версии.

Я прочитал это, но, похоже, это относится только к изображениям, а не к CSS / js.

Важная причина для этого – перебор / аннулирование кеша.

Да, известная проблема … В нашем производственном процессе мы оказались с таким блоком в сценарии 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. В скрипте 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); 

Хо, это большая ошибка Symfony2! Я не уверен, что кто-нибудь сообщил об этом!

Мое решение состояло в том, чтобы добавить псевдоним в конфигурацию Nginx, но это ваш def. чище и лучше.

Мое обходное решение состоит в том, чтобы сделать rewriteRule в файле .htaccess, чтобы обслуживать реальный файл, но принимая полный URL-адрес с номером версии. Что-то вроде этого …

приложение / Config / config.yml

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

Web / .htaccess

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