Как мне исправить исключение symfony2 «Добавить myBundle в конфигурацию AsseticBundle»?

84

Когда я пытаюсь использовать {% javascript %}тег TWIG для ссылки на мой .jsфайл, он возвращает меня со следующим исключением:

An exception has been thrown during the compilation of a template ("You must add CompetitiongameBundle to the assetic.bundle config to use the {% javascripts %} tag in CompetitiongameBundle:game:index.html.twig.") in "CompetitiongameBundle:game:index.html.twig".

Мой index.html.twigвыглядит так:

{% javascripts 'CompetitiongameBundle/Resources/views/public/js/*'%}
    <script type="text/javascript" src="{{ asset_url }}" ></script>
{% endjavascripts %}
Hello {{ name }}!

<a href='{{ nexturl }}' >Login</a>

Мой пакет уже присутствует в файле конфигурации, когда я делаю следующее:

php app/console config:dump-reference assetic

Как я могу это исправить ?

Маниш Басдео
источник
Отметьте этот вопрос и два предлагаемых решения: stackoverflow.com/questions/10376946/…
Карлос Гранадос,
Было бы здорово, если бы вы выбрали ответ на этот вопрос.
tftd

Ответы:

176

Да, я попробовал, и это решило проблему для меня. Для кого-то (вроде меня), который изначально не знает, как добавить, просто:

  1. редактировать app/config/config.yml
  2. затем перейдите к assetic:
  3. под ассетом: перейти к bundles: []
  4. и в bundles: []// введите имя вашего пакета

например, если ваш пакет Acme\DemoBundle, то сделайте следующее

assetic:
   bundles: [ AcmeDemoBundle ]

Никаких кавычек AcmeDemoBundle. Вот и все. (Symfony2)

Шабир Решамвала
источник
14
При необходимости дополнительные пакеты следует разделять запятыми.
Zoot
1
Я использую symfony2.3, я добавил свой пакет в массив, но у меня все еще то же исключение. Даже когда я комментирую пакеты, я получаю то же сообщение об исключении. Что я должен делать?
Dev DOS
Если вы переходите на prod и у вас возникла эта проблема, не забудьте очистить кеш и выгрузить свои ассетные ресурсы: «php app / console cache: clear --env = prod --no-debug» и «php app / сборка консоли: dump --env = prod --no-debug "
Бертран
@Dev DOS ты нашел решение ..?
Euphor08
24

Если вы хотите, чтобы ассетик включал ваши пакеты по умолчанию, вы можете прокомментировать (с #) строку bundles: []

пример:

assetic:
    debug:          "%kernel.debug%"
    use_controller: false
    #bundles:        [ ]
    #java: /usr/bin/java
Тиви
источник
есть ли побочный эффект для комментирования пакетов?
Permana
Ничего подобного. Он просто заставляет сборку включать все пакеты в вашем проекте. Возможно, это может замедлить работу вашего приложения, но лично я никогда не замечал разницы в скорости.
Tivie
10

Иногда вам нужно принимать решения на лету, тогда вы можете использовать DependencyInjection .

Например, для загрузки и управления конфигурацией :

<?php

namespace You\ExampeBundle\DependencyInjection;

use Symfony\Component\DependencyInjection\ContainerBuilder;

/* ... */

class YouExampeExtension extends Extension
{

    /* ... */

    public function load(array $configs, ContainerBuilder $container)
    {
        /* ... */

        $aAsseticBundle = $container->getParameter('assetic.bundles');
        $aAsseticBundle[] = 'YouExampeBundle';
        $aAsseticBundle[] = 'AnotheBundle';
        $container->setParameter('assetic.bundles', $aAsseticBundle);

        /* ... */
    }
}

Вы можете использовать более сложную логику для управления конфигурацией (в разумных пределах)

Максим Шатов
источник
1
Это особенно полезно, если вы расширяете другой Bundle с помощью наследования Bundle.
грипп
3

Вам необходимо добавить свой пакет в строку bundle: [] раздела Assetic: в файле app / config / config.yml (symfony 2.1)

user1041503
источник