Symfony2: используя assetic-dump, можно сбросить только один файл?

После запуска

php app/console assetic:dump --env=prod

все активы сбрасываются.

Есть ли способ сбросить только один файл?

Ответ 1

Похоже, вам нужно будет создать свою собственную команду:

<?php

namespace Your\Namespace\Command;

use Symfony\Bundle\AsseticBundle\Command\AbstractCommand;

class DumpSingleAsset extends AbstractCommand
{
    protected function configure()
    {
        $this
            ->setName('assetic:dump_single_asset')
            ->setDescription('Dumps a single asset')
            ->addArgument('name', InputArgument::REQUIRED, 'The name of the asset')
        ;
    }


    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $name = $input->getArgument('name');
        $this->dumpAsset($name, $output); // Inherited from AbstractCommand
    }
}

Ассемблерные документы показывают путь более простой способ сбрасывать активы, но я не смог найти документацию о внутренностях AsseticBundle, я просто прочитал код команды.

Ответ 2

Вот решение, использующее только конфигурации. В файле конфигурации оставляйте пакеты как:

bundles: []

Это не будет загружать активы из любого пакета, если вы не укажете его вручную.

используйте именованные активы, как описано здесь, для загрузки активов, которые вы хотите по отдельности.

http://symfony.com/doc/current/cookbook/assetic/asset_management.html#using-named-assets

Ответ 3

У меня есть свое собственное сложное решение для аналогичной проблемы, потому что мне нужны дамп-активы, отсутствующие на шаблонах ветки, поступающих из базы данных или json файла.

Только с именем актива, я не понимаю, как вы могли это сделать без дальнейших объяснений. Если вы печатаете значение $name при запуске спам-дампа, вы получаете что-то вроде "afd49f7". Symfony2 читает все блоки javascripts и stylesheets на шаблонах ветки и автоматически назначает это имя.

Если вы попытаетесь минимизировать один файл вручную, вам лучше использовать yui-compress или аналогичный напрямую, иначе, если вам действительно нужно сбросить коллекцию активов в один файл (коллекция может содержать только один файл) или один файл, но с помощью symfony2 вы должен использовать "названные активы" и что-то вроде команды, предложенной parla. См. Соответствующий раздел Как использовать Assetic для управления активами, а также проверьте AsseticBundle Конфигурация.

В любом случае команда выше не работает на Symfony2 v2.3 (LTS), поэтому метод dumpAsset объявляется как закрытый в DumpCommand, а AbstractCommand не существует.

Если вы используете Symfony2 v2.3, вам нужно переписать всю команду add --name и изменить ->setName('assetic:dump') для чего-то еще.