2011-11-24 13 views
16

DOMANDA VECCHIO, vedi sotto per la versione aggiornataCome rendere Symfony2 in grado di caricare file CSS, JS direttamente e non tramite PHP?

mio ambiente di sviluppo non è il più veloce. Prendo circa 500ms per richiesta PHP. Sta cominciando a diventare un problema con i file di risorse Symfony2 perché ognuno dei file di risorse vengono richiesti tramite i controller interni di Symfony:

http://localhost/myproj/app_dev.php/js/bb8690a_part_4_myJavaScriptFile_2.js

Come si può vedere, i file vengono caricati tramite il quadro Symfony e non direttamente. Dal momento che sto iniziando ad avere più di 20 file da caricare, moltiplica quello con i 500 ms rende i carichi di pagina molto lenti. Voglio caricare i file direttamente, ma non sono sicuro di come farlo.

Questo fa parte del config.yml:

# Assetic Configuration 
assetic: 
    debug:   %kernel.debug% 
    use_controller: false 
    # java: /usr/bin/java 
    filters: 
     cssrewrite: ~ 

ho pensato impostazione use_controller-false lo farebbe, ma no.

C'è un modo per gestire direttamente il caricamento di tali risorse?

UPDATE:

Questo è l'URL si tenta di utilizzare la società:

http://localhost/myproj/_controller/js/bb8690a_part_4_myJavaScriptFile_2.js

ho impostato use_controller-false sia per il dev e configurazioni generali. Come faccio a sbarazzarmi della parte _controller dell'URL?

Edit: Se posso cancellare la cache, eseguire assetic:dump e hanno use_controller come false, poi su di ricarica ottengo Cannot load resource ".". Non riesco a risolvere il problema a meno che non abiliti temporaneamente lo use_controller per il caricamento di una pagina. Dopodiché, lo disattivo e lo ricarico e ora richiede da quell'URL non valido che contiene _controller.

Sembra funzionare anche in prod, ma non in dev. Strano.

codice Template:

{% stylesheets filter="cssrewrite" 
      'bundles/outotecofil/css/reset.css' 
      'bundles/outotecofil/css/*' 

      output='css/dist/dist.css' 
     %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
     {% endstylesheets %} 

     {% javascripts 
      '@OutotecCommonBundle/Resources/public/js/jquery-1.6.2.min.js' 
      '@OutotecCommonBundle/Resources/public/js/jquery-ui-1.8.16.custom.min.js' 
      '@OutotecCommonBundle/Resources/public/js/chosen.jquery.min.js' 
      '@OutotecCommonBundle/Resources/public/js/widget/*' 

      '@OutotecOFILBundle/Resources/public/js/OFILDependencyManager.js' 
      '@OutotecOFILBundle/Resources/public/js/widget/*' 
      '@OutotecOFILBundle/Resources/public/js/plant-scope.js' 

      output='js/dist/dist.js' 
     %} 
     <script src="{{ asset_url }}"></script> 
     {% endjavascripts %} 

essere estremamente chiaro: senza app_dev.php (cioè in modalità prod), esso funziona . Solo in dev non lo fa e lancia questo errore "Impossibile caricare la risorsa". "" A meno che prima non abiliti use_controller per una richiesta, dopo di che posso disabilitarlo e ricaricarlo anche se gli URL conterranno quindi _controller/ nei loro percorsi.

+0

Si prega di mostrare il codice nel modello in cui si chiamano le risorse. – Sgoettschkes

+0

@Boo Ho aggiornato la domanda. – Tower

+0

@Tower puoi scrivere i passi esatti per raggiungere questo obiettivo? – danidacar

risposta

20

cercare di rimuovere questa parte del codice nella routing_dev.yml quando use_controller è falsa:

_assetic: 
    resource: . 
    type:  assetic 
6

documentazione Symfony è sempre il primo luogo dove cominciare look: How to Use Assetic for Asset Management

Nell'ambiente prod, i vostri JS e CSS file sono rappresentati da un unico tag ciascuno.In altre parole, invece di vedere ogni file JavaScript si sta anche nel sorgente, è probabile che basta vedere qualcosa di simile:

<script src="/app_dev.php/js/abcd123.js"></script> 

Inoltre, tale file in realtà non esiste, né è eseguito il rendering in modo dinamico da Symfony (poiché i file di asset si trovano nell'ambiente di sviluppo). Questo è fatto apposta: lasciare che Symfony generi questi file dinamicamente in un ambiente di produzione è troppo lento.

Invece, ogni volta che si utilizza la vostra applicazione nell'ambiente prod (e quindi, ogni volta che si distribuisce), si dovrebbe eseguire il seguente compito:

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

Questo sarà fisicamente generare e scrivere ogni file che si bisogno (es. /js/abcd123.js). Se aggiorni qualcuno dei tuoi beni, dovrai eseguirlo di nuovo per rigenerare il file.

+0

Ok, ho capito, ora sta provando a caricare da 'http: // localhost/myproj/_controller/js/dist/dist_jquery-1.6.2.min_1.js'. Senza il '_controller', funzionerebbe. Perché l'ha messo? – Tower

+0

Abilita controller_utente? – dlondero

+0

cosa user_controller? Cos'è quello? – Tower

1

ho lo stesso problema, configurazione di lavoro è: commento fuori dal routing_dev.yml:

_assetic: 
resource: . 
type:  assetic 

imposta use_controller su false. Dopo averlo fatto, sono in grado di usare assetic: dump e vedere la pagina di lavoro.

5

Se si utilizza assetic:dump, allora dovete cache:clear -e dev

" ... se si esegue la cache: la cache chiaro su produzione, si riscalda la cache con la modalità di debug Se si tenta di scaricare le attività in seguito. potrebbero accadere cose strane ".

ho trovato qui: http://sftuts.com/using-assetic-in-symfony2-for-css-compression (4 comma)

+0

Sembra che quel post sftuts stia solo parlando di cosa fare nel proprio ambiente di produzione e il consiglio non dovrebbe influenzare ciò che si fa in dev. Mi sto perdendo qualcosa? – Sam

5

Dal documentation

Modificare il dev config per evitare di utilizzare il controller.

# app/config/config_dev.yml 
assetic: 
    use_controller: false 

Rimuovere il percorso in routing_dev.yml per evitare effetti collaterali

# app/config/routing_dev.yml 
_assetic: 
    resource: . 
    type:  assetic 

discarica automaticamente i css/meno file ogni volta che si dispone di una modifica.

php app/console assetic:dump --watch 
Problemi correlati