2012-06-21 2 views
5

Ich versuche, Assetic in einem Symfony 2-Projekt zu verwenden. Ich habe folgende Einstellungen in meinem config.yml:Asset-Asset-Sammlung verkettet im Debug-Modus

# app/config/config.yml 
assetic: 
    debug:   %kernel.debug% 
    use_controller: true 
    filters: 
     cssrewrite: ~ 
     yui_css: 
      jar: /home/testing/bin/yuicompressor-2.4.7.jar 
     less: 
      node: /usr/bin/node 
      node_paths: [/usr/local/bin/] 
      apply_to: "\.less$" 
    assets: 
     all_js: 
      inputs: 
       - @FoundationViewBundle/Resources/public/js/* 
      filters: [?yui_js] 
     all_css: 
      inputs: 
       - @FoundationViewBundle/Resources/public/css/* 
      filters: [less, ?yui_css] 

(Falls Sie sich fragen, werden diese Einstellungen nicht in der config_dev.yml Datei überschrieben werden.)

Diese Sammlungen von Assetic abgeholt und Routen werden für sie erstellt. Für jede Datei gibt es individuelle Routen mit einer Nummer und dem Dateinamen ohne die Dateiendung. Für die Datei "base.css" lautet die Route zum Herunterladen der Datei (mit angewendeten Filtern) beispielsweise "/ assetic/all_css_part_1_base_1".

I schließen dann die Asset-Sammlungen in meiner Vorlage Zweig wie folgt:

{% stylesheets '@all_css' %} 
    <link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}"> 
{% endstylesheets %} 

(. Und in ähnlicher Weise für die "all_js" Sammlung, aber ich werde die CSS Seite verwenden, um mein Problem zu demonstrieren)

Wenn Twig meine Vorlage rendert, verwendet es nicht die Routen, die für die einzelnen Dateien erstellt wurden, sondern zeigt "asset_url" für die Sammlung "all_css" als "/css/9118a5a_part_1.css" an.

Ich benutze den Dev-Front-Controller und habe getestet, dass Assetic glaubt, dass es im Debug-Modus ist. (Die Nur-Produktion-Filter werden nicht angewendet.) Die Dateien werden jedoch immer noch verkettet, obwohl die Dokumentation etwas anderes vermuten lässt.

Es ist sehr schwierig, Probleme in diesen Dateien aufzuspüren, da die Zeilennummern insbesondere bei JavaScript-Fehlern nicht übereinstimmen. Muss ich noch etwas anderes tun, damit Twig die Dateien separat anzeigt?

Antwort

0

Sie können einfach die separaten Elemente in Ihrer Vorlage auflisten, und es werden separate Dateien generiert, as documented here. Bei der Produktion wird es in 1 Datei zusammengefasst.

+0

Ich hatte gehofft, diese Vorlage als Teil eines Pakets zu verwenden, das in mehrere Projekte importiert werden kann und die richtigen Assets basierend auf den Projektkonfigurationen enthält. Wenn ich die Assets direkt in die Vorlage lege, wird sie nicht wiederverwendbar sein. (Ich denke, ich könnte die Asset-Aufnahme in Blöcke setzen und sie mit einer projektspezifischen Vorlage überschreiben, wenn es keine andere Möglichkeit gibt.) – restouffer

1

Sie müssen den Parameter ouput in Ihren Zweigblöcken wie folgt angeben.

{% javascripts '@all_js' output="assetic/js/all.min.js" debug=false %} 
    <script type="text/javascript" charset="utf-8" src="{{ asset_url }}"> 
{% endjavascripts %} 

{% stylesheets '@all_css' output="assetic/css/all.min.css" debug=false %} 
    <link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}"> 
{% endstylesheets %} 

Am besten wäre es auf output Parameter in config.yml angegeben verlassen, aber leider funktioniert es nicht. Es funktioniert, um die korrekte Datei auszugeben, wenn die Assets gedumpt werden, aber das Asset nicht automatisch in den Zweig eingefügt wird. Sie müssen es wie im vorherigen Beispiel angeben.

Das Debug-Argument ist hier optional, es soll den Debug-Modus für eine bestimmte Sammlung erzwingen und verschiedene Dateien ausgeben. Sie können diesen Parameter auch in config.yml einstellen.

assets: 
    all_js: 
     inputs: 
      - @FoundationViewBundle/Resources/public/js/* 
     filters: [?yui_js] 
     output: "assetic/css/all.min.js" 
     debug: true