web-dev-qa-db-ja.com

Symfony 4にアセット(CSS、JS)を含める/ Twigテンプレート

私はSymfonyを学び、Symfony 4でボイラープレートアプリをセットアップしようとしています

このSymfonyドキュメント は、ページにアセットを含める方法、つまりassetパッケージをそのように使用する方法を説明しています。

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

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

このパッケージをインストールし、_/public_ディレクトリのcssファイルにリンクしようとしています。

Symfonyがルートの_/assets_フォルダーにアセットを配置することを推奨していることを知っていますが、可能であればこれを避けたいです。アセットをパブリックディレクトリに配置する方が理にかなっています。

私のTwig基本テンプレートは次のとおりです:

_<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>
_

問題

ルート/ページ/テンプレートをロードすると、リンクされたcssはルートからの単純なリンクとしてレンダリングされます(Imが_<link href="public/css/main.css" rel="stylesheet" />_としてリンクしているかのように-もちろん、_public/*_のルートセットはありません。 _404/Not Found_を返します。

asset()関数が使用されていないかのようです。

試しました

  • ローカルSymfonyサーバーを再起動する
  • リンクを適宜調整して、アセットをルートのassetsフォルダーに移動します
  • assetパッケージがインストールされたことを確認する(インストールされている)
  • この問題をググる(Symfony 4には何もない)

質問

  • _public/*_パスがURLルートではなくアセットへのファイルシステムパスであることをSymfonyに知らせ、アセットを正常に含めるにはどうすればよいですか?
  • ルートの推奨される_/assets_フォルダー以外のアセットのデフォルトの場所を設定するそのような機能はありますか?
6
yevg

asset関数のパスは、プロジェクトルートではなく、パブリックディレクトリからの相対パスである必要があります。

したがって、サーバーのdocrootが_public_html_であり、アセットが_public_html/css/main.css_にある場合、アセットの呼び出しは{{ asset('css/main.css') }}になります。

追記:アセット機能では、アセットをパブリックディレクトリの外に置くことはできません。それらは公開ディレクトリにある必要があります

16
simshaun

Webpackがファイルを監視しているかどうかを確認します...(yarnウォッチ)何時間も回答を検索した後、プロジェクトチームのメンバーの1人が実行しているかどうかを尋ねました= {その直後に動作しました。

0
bab2715