2012-01-18 6 views
13

Ho seguito la guida sul fondo di questo articolo: http://symfony.com/doc/current/cookbook/assetic/asset_management.htmlCome rendere la compilazione di risorse Symfony 2 su diversi nomi di file del prodotto?

ho questo codice:

{% javascripts 
     ... 

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

Ora, se corro sf assetic:dump --env=prod crea il file compilato correttamente. Tuttavia, mi piacerebbe che generasse un nome casuale (o timestamp) in modo da evitare il problema della cache del browser lato client. In questo momento crea sempre il file dist.js che viene memorizzato nella cache e quando aggiorno il mio codice gli utenti non vedranno la differenza (o otterranno errori).

C'è un modo per renderlo simile a dist12345678.js?

risposta

7

Hai due opzioni qui: o lasciare fuori il nome del file di output (sarà poi un hash generato automaticamente che cambia) o utilizzare le versioni di asset, come descritto nella documentazione di Symfony: http://symfony.com/doc/current/reference/configuration/framework.html#ref-framework-assets-version

+0

Non sembra avere alcun effetto. Ho cancellato la cache e ho eseguito 'assetic: dump --env = prod' e ho provato contro l'ambiente prod e non vedo alcun'? V0.0.1' lì. – Tower

+1

rFactor, eseguire "cache: clear --env = prod –

+5

Lasciare fuori il nome del file di output non funziona, ha sempre generato lo stesso nome come" 8662e4b.js ". La versione di asset è funzionante –

3

ho fatto un ho fatto molti esperimenti con Assetic per un progetto, e mi sono imbattuto in un modo per fare esattamente quello che stai chiedendo. Se la stringa "output" contiene "*", viene sostituita da una stringa arbitraria generata derministicamente.

Per esempio, ho il seguente in un modello (PHP, non stiamo usando ramoscello):

<?php foreach($view['assetic']->javascripts(array('@MyBundle/Resources/public/js/page.js'), array(), array('output' => 'js/compiled/page_*.js')) as $url): ?> 
    <script type="text/javascript" src="<?php echo $view->escape($url) ?>"></script> 
<?php endforeach; ?> 

<?php foreach($view['assetic']->stylesheets(array('@MyBundle/Resources/public/css/page.css'), array(), array('output' => 'css/compiled/page_*.css')) as $url): ?> 
    <link rel="stylesheet" href="<?php echo $view->escape($url) ?>" /> 
<?php endforeach; ?> 

Quando eseguo app/console Assetic: discarica, genera/web/css/compilato /page_8e8fcb3.css e /web/js/compiled/page_241b4e5.js.

+0

Ho provato a inserire un asterisco, ma sembra che venga rimosso e non venga sostituito da una stringa casuale. fare qualcosa per conto proprio? – Tower

+0

Non ho fatto niente da solo, e il mio codice è esattamente come mostrato sopra tranne il nome del mio pacchetto. È possibile che qualcosa si stia perdendo nel compilare il tuo template di twig su php? non riesco a immaginare perché sarebbe il caso, ma non mi viene in mente nient'altro che spieghi perché l'asterisco viene trattato in modo diverso nel mio sistema che nel tuo. – AmericanUmlaut

+0

Potrebbe essere una versione diversa. versione ic? – Tower