2012-02-23 20 views
14

Mi piacerebbe configurare globalmente la directory di output di dove dump asset i miei file JS. Attualmente, vanno sempre a web/js/*. Voglio cambiare questo a web/js/compiled/*.Configure output dir per Assetic in Symfony2

E 'possibile specificare questo a un livello per file: http://symfony.com/doc/2.0/cookbook/assetic/asset_management.html#dumping-asset-files

non riesco a trovare un modo per impostare questo a livello globale in tutta la mia Symfony app. Qualche parametro di configurazione mi manca?

UPDATE

Trovato un parametro di configurazione Assetic chiamato write_to. Impostando questo in config.yml, la riga di comando assetic:dump esegue il dump dei file nella nuova directory, ma all'interno dei file di ramoscello la variabile asset_url continua a puntare al percorso originale.

+0

Hai mai trovare una soluzione? Avrei pensato che l'opzione 'read_from' nella configurazione sarebbe quella che stiamo cercando. Tuttavia, non posso ottenere quell'opzione per fare qualsiasi cosa. Indipendentemente da ciò a cui imposto il parametro read_from, la mia applicazione utilizza il percorso predefinito. – kmfk

+0

@kmfk Ancora niente. In questo momento, stiamo solo impostando il parametro 'output' per ogni blocco' javascripts', ma non è affatto ideale. – anushr

+0

Sì, ho scaricato asseticamente le mie risorse direttamente nel nostro bucket S3 e volevo che l'ambiente prod leggesse i file da lì - mentre l'ambiente dev esegue il dump su una cartella locale e, i miei template dovrebbero leggere da quella cartella mentre sul nostro server di sviluppo. Ho finito per controllare l'ambiente nel controller e passare una var al template per anteporre 'asset_url' per il cdn. Non ideale, ma fa il lavoro. – kmfk

risposta

4

È possibile impostare il percorso dell'asset (assets_base_urls) per il ramoscello su un percorso statico, anziché utilizzare il percorso relativo. Nel file config.yml, sarebbe simile a questa:

framework: 
    templating: 
     engines: ['twig'] 
     assets_base_urls: 
      http: [http://path.to-cdn.com] 

questo effetto asset_url da Assetic così come metodo di ramoscello asset(). Quest'ultimo può o non può essere desiderato.

16

È necessario utilizzare la proprietà write_to.

nella mia configurazione per exemple io uso

# Assetic Configuration 
assetic: 
    debug:   %kernel.debug% 
    use_controller: %kernel.debug% 
    read_from:  %kernel.root_dir%/Resources/views/ 
    write_to:  %kernel.root_dir%/../web/static/ 

tuo ouput stringa inizia dove finisce write_to

per exemple

{% javascripts filter="closure" output='js/main.js' 

...

{% stylesheets filter='compass,?cssrewrite' 
    'default/static/sass/screen.scss' 
    output='css/screen.css' 
%} 

entrambi saranno collocati rispettivamente in /web/static/js/main.js e /web/static/css/screen.css

assets_base_urls viene utilizzato per specificare l'URL di base di da utilizzare per le risorse a cui si fa riferimento dalle pagine http e ssl (https).

!!assets_base_urls è anche utilizzata dai {% images %} come la radice prima output valore, ma {% images %} non considera write_to quando il rendering html (solo durante lo scaricamento) quindi meglio non usare write_to e contare solo su output valore. Maggiori informazioni in merito a my other post on stackoverflow e in this post on AsseticBundle's github.

+0

Symfony così complicato :) – userlond

-4

Prova questa commande $ app/console --env=prod assetic:dump web/ avete juste cambiare l'URL che si desidera raher di 'web /'

2

This GitHub issue comment mi ha aiutato con questo problema. Mentre sei in sviluppo, le tue risorse continueranno a passare attraverso il controller, ma in produzione, gli URL saranno come desideri.

Esempio config.yml:

assetic: 
    write-to: %kernel.root_dir%/../web/assets 
    ... 
framework: 
    ... 
    templating: 
     engines: ['twig'] 
     packages: 
      assetic: 
       base_urls: '/assets' 

esempio nel modello:

{% block javascripts %} 
    {% javascripts '@jquery' '@bootstrap_js' '@backbone' '@handlebars' combine=true package='assetic' %} 
    <script src="{{ asset_url }}"></script> 
    {% endjavascripts %} 
{% endblock %} 

Si noti che è necessario aggiungere il pacchetto = attributo 'Assetic' nel tag script java. Questo è un buon compromesso IMO perché non romperà le risorse da altri pacchetti come la soluzione di kmfk lo farà.

2

Solo una breve nota su questo. Se si utilizza assets_base_urls, per specificare un URL di base relativo, questo funziona solo prima di Symfony 2.7, a causa dell'introduzione del nuovo componente delle risorse in quella versione. Per ulteriori informazioni su come modificare questo è disponibile presso http://symfony.com/blog/new-in-symfony-2-7-the-new-asset-component, ma il lungo e breve di esso è che:

framework: 
    templating: 
     assets_base_urls: 
      http: ['/some-relative-url'] 
      ssl: ['/some-relative-url'] 

diventa:

framework: 
    assets: 
     base_path: /some-relative-url 
Problemi correlati