web-dev-qa-db-fra.com

Inclusion d'actifs (CSS, JS) dans Symfony 4 / Twig Template

Im apprendre Symfony et essayer de configurer une application passe-partout dans Symfony 4

Ce document Symfony décrit comment inclure des actifs dans votre page, à savoir en utilisant le package asset comme ça ..

<img src="{{ asset('images/logo.png') }}" alt="Symfony!" />

<link href="{{ asset('css/blog.css') }}" rel="stylesheet" /> 

J'ai installé ce paquet et j'essaie de créer un lien vers un fichier css dans mon répertoire /public.

Je sais que Symfony recommande de placer les ressources dans un dossier /assets À la racine, mais je voudrais éviter cela si possible. Il est plus logique pour moi de placer des actifs dans le répertoire public.

Mon modèle de base Twig est le suivant:

<html>
    <head>
        <meta charset="UTF-8">
        <title>{% block title %}Welcome!{% endblock %}</title>

        {% block stylesheets %}
            <link href="{{ asset('public/css/main.css') }}" rel="stylesheet" />
        {% endblock %}
    </head>
    <body>
        {% block body %}{% endblock %}
        {% block javascripts %}{% endblock %}
    </body>
    <footer>footer</footer>
</html>

Problème

Lorsque je charge l'itinéraire/la page/le modèle, le CSS lié est rendu comme un simple lien à partir de la racine (comme si je le liais comme <link href="public/css/main.css" rel="stylesheet" /> - il n'y a bien sûr aucun itinéraire défini pour public/* et cela renvoie 404/Not Found.

C'est comme si la fonction asset() n'était même pas utilisée.

J'ai essayé

  • Redémarrer mon serveur Symfony local
  • déplacer l'actif vers un dossier assets à la racine lors du réglage du lien en conséquence
  • vérifier que le package asset a été installé (il l'est)
  • googler ce problème (rien pour Symfony 4)

Questions

  • Comment puis-je faire savoir à Symfony que le chemin public/* Est un chemin d'accès au système de fichiers vers les actifs, PAS une route URL, et inclure mes actifs avec succès?
  • Existe-t-il une telle fonctionnalité pour définir un emplacement par défaut pour les actifs autres que le dossier /assets Recommandé à la racine?
6
yevg

Les chemins d'accès dans la fonction asset doivent être relatifs à votre répertoire public, pas à la racine du projet.

Donc, en prétendant que le docroot de votre serveur est public_html, Et qu'un actif est dans public_html/css/main.css, L'appel d'actif serait {{ asset('css/main.css') }}.

Remarque supplémentaire: La fonction d'actif ne vous donne pas la possibilité de placer des actifs en dehors du répertoire public. Ils doivent être dans le répertoire public.

16
simshaun

Vérifiez si le webpack regarde des fichiers ... (veille de fil) Après des heures de recherche d'une réponse, un des membres de mon équipe de projet m'a demandé si j'avais cette exécution = {J'ai travaillé immédiatement après.

0
bab2715