web-dev-qa-db-fra.com

Où vont les ressources CSS et JS partagées de Symfony2, selon les meilleures pratiques?

Je place normalement mes actifs JS et CSS Assetic dans un DefaultBundle, mais je suppose que le meilleur endroit pour les mettre serait dans les dossiers app/Resources/public/(js | css).

De plus, pour référencer les actifs que nous utilisons:

{% javascripts filter="" output="js/core.js" debug=true
    "@DefaultBundle/Resources/public/js/jquery-1.6.2.js" %}
    <script src="{{ asset_url }}" type="text/javascript"></script>
{% endjavascripts %}

Comment faire pour référencer des actifs partagés comme jQuery et mes feuilles de style de réinitialisation CSS dans app/Resources/public/...?

35
josef.van.niekerk

Oui, c'est un bon choix pour ne pas mettre les bibliothèques dans un bundle

voir ici: http://symfony.com/doc/current/cookbook/bundles/best_practices.html#vendors

Un bundle ne doit pas intégrer de bibliothèques tierces écrites en JavaScript, CSS ou tout autre langage.


Ce que je vous suggère, c'est de mettre jquery et réinitialiser les fichiers sous quelque chose comme: app/Resources/public/js/jquery.min.js et pour changer votre code avec quelque chose comme:

{% javascripts filter="" output="js/core.js" debug=true
    "../app/Resources/public/js/jquery-1.6.2.js" %}
    <script src="{{ asset_url }}" type="text/javascript"></script>
{% endjavascripts %}

J'espère que cela fonctionnera pour vous.

[~ # ~] modifier [~ # ~] : réponse modifiée pour ressembler à https://stackoverflow.com/a/9237004/505836 , merci David.

24
julesbou

Vous pouvez également utiliser ceci:

{% stylesheets '../app/Resources/public/css/*' %}
    <link href="{{ asset_url }}" type="text/css" rel="stylesheet" />
{% endstylesheets %}
27
David Cramblett

Ma solution est presque la même que celle de David, mais en utilisant %kernel.root_dir% au lieu de coder en dur le dossier app (bien que je doute que beaucoup changent le nom de ce dossier), par exemple:

{%- javascripts output='compiled/main.js'
    '%kernel.root_dir%/Resources/public/js/jquery-1.10.2.min.js'
    '%kernel.root_dir%/Resources/public/js/underscore-1.5.2.min.js'
    '@MyOwnBundle/Resources/public/js/default.js'
-%}
    <script src='{{ asset_url }}'></script>
{%- endjavascripts %}

Si les bibliothèques tierces font référence à leurs propres actifs (par exemple, généralement des images dans un sous-dossier img, référencées à partir de fichiers .css), il suffit généralement de créer les liens symboliques correspondants sur le serveur, par exemple ln -s .../app/Resources/public/img .../web/img ou quelque chose de similaire. Ou utilisez le filtre cssrewrite, bien sûr - mais méfiez-vous de ses mises en garde.

(Notez également que je n'utilise pas le type="<mime-type>", car le type de contenu des fichiers est de toute façon fourni dans les en-têtes HTTP.)

8
Martin Lie

Vous pouvez remplacer ../app/Resources/public/css/ par public/css/. De même pour le dossier Javascript.

{% stylesheets filter='less' output='css/core' 'public/css/*' %}

      <link href="{{ asset_url }}" type="text/css" rel="stylesheet" />

{% endstylesheets %}

{% javascripts "public/js/*" %}

      <script src="{{ asset_url }}" type="text/javascript"></script>

{% endjavascripts %}

Voici tous les fichiers de /web/public le dossier est automatiquement chargé.

2
jeremieca