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 ?


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)


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

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)


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)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.