Como faço para corrigir a exceção do symfony2 “Adicionar myBundle à configuração do asseticBundle”?

84

Quando tento usar a {% javascript %}tag TWIG para vincular ao meu .jsarquivo, ela me retorna com a seguinte exceção:

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".

Minha index.html.twigaparência é:

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

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

Meu pacote já está presente no arquivo de configuração quando eu faço:

php app/console config:dump-reference assetic

Como posso consertar isso ?

Manish Basdeo
fonte
Verifique esta questão e as duas soluções propostas: stackoverflow.com/questions/10376946/…
Carlos Granados
Seria ótimo se você realmente selecionasse uma resposta para esta pergunta.
tftd

Respostas:

176

Sim, eu tentei e resolveu o problema para mim. Para alguém (como eu) que não sabe inicialmente como adicionar, basta:

  1. editar app/config/config.yml
  2. então vá para assetic:
  3. sob assetic: vá para bundles: []
  4. e em bundles: []// digite o nome do seu pacote

por exemplo, se o seu pacote é Acme\DemoBundle, faça o seguinte

assetic:
   bundles: [ AcmeDemoBundle ]

Sem aspas AcmeDemoBundle. É isso aí. (Symfony2)

Shabbir Reshamwala
fonte
14
Se necessário, os pacotes adicionais devem ser separados por vírgulas.
Zoot de
1
Estou usando o symfony2.3, adicionei meu pacote ao array, mas ainda tenho a mesma exceção. Mesmo quando comento os pacotes, recebo a mesma mensagem de exceção. O que devo fazer?
Dev DOS
Se você estiver migrando para o prod e tiver esse problema, não se esqueça de limpar seu cache e despejar seus ativos asséticos: "php app / console cache: clear --env = prod --no-debug" e "php app / console assetic: dump --env = prod --no-debug "
Bertrand
@Dev DOS você encontrou uma solução ..?
Euphor08
24

Se quiser que o assetic inclua seus pacotes por padrão, você pode comentar (com #) a linha bundles: []

ex:

assetic:
    debug:          "%kernel.debug%"
    use_controller: false
    #bundles:        [ ]
    #java: /usr/bin/java
Tivie
fonte
Existe algum efeito colateral para comentar pacotes?
Permana
Nenhum que eu possa pensar. Isso apenas faz com que o assetic inclua todos os pacotes em seu projeto. Talvez isso torne seu aplicativo lento, mas pessoalmente nunca percebi nenhuma diferença na velocidade.
Tivie
10

Às vezes, você precisa tomar decisões em tempo real, então você pode usar o DependencyInjection .

Por exemplo, para carregar e gerenciar a configuração :

<?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);

        /* ... */
    }
}

Você pode usar uma lógica mais complexa para manipular a configuração (em limites razoáveis)

Максим Шатов
fonte
1
Isso é particularmente útil se você estender outro Bundle usando a herança de Bundle.
gripe
3

Você precisa adicionar seu pacote ao pacote: [] linha de assetic: seção no arquivo app / config / config.yml (symfony 2.1)

user1041503
fonte