1. ホーム
  2. symfony

[解決済み] assetic:dumpとassets:installの違いについて

2023-08-16 18:58:32

質問

Symfony2において、以下の違いは何ですか? assetic:dumpassets:install ? これらのコマンドはそれぞれどのようなシナリオで、どのような順序で(順序が関係する場合)使用されるべきですか?

どのように解決するのですか?

私は実際に は最近このことについて書きました。 を Symfony 2 をベースとした OroCRM についての記事で書きました。 もしあなたが異なるコマンドのコンテキストや理由を知りたいのであれば、それが面白いかもしれません。

symfony アプリケーションにフロントエンドのファイル (javascript、css、画像など) を含めるために2つの異なるシステムがあります。 1つは assets:install コマンドが最初に登場しました。 このコマンドはアプリケーションのすべての symfony Bundle を検索して

Resources/public

フォルダーに格納されます。 見つかった場合は assets:install コマンドは Resources/public から web/public/bundle/[bundle-name] . これは、twig で作成されたリンクが assets 関数で作成されたリンクが、これらのファイルを探す場所です。 これは

<script src="{{ asset('js/script.js') }}" type="text/javascript"></script>

このようになります

<script src="/bundles/[bundle-name]/js/script.js" type="text/javascript"></script>

以上で assets システムが行うことです。 フロントエンドのファイルをバンドルと一緒に保存することができます。

assetic のシステムは異なります。 とは assetic を使うと、このようにファイルにリンクすることになります。

{% javascripts '@AcmeFooBundle/Resources/public/js/foo.js' %}
    <script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}

スタイルシートや画像にも同じようなタグがあります。 注目すべきは assetic でファイルへのリンクが可能です。 のいずれかの を束ねることができます。( @AcmeFooBundle ). Asseticでは、ワイルドカードを使用してフォルダ内の複数のファイルにリンクすることも可能です。

{% javascripts '@AcmeFooBundle/Resources/public/js/*' %}
    <script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}

もう一つの違いは assetic とのもう一つの違いは、生成されるリンクにあります。 このため dev 環境では、次のようになります。

<script type="text/javascript" src="/app_dev.php/js/foo.js"></script>
<script type="text/javascript" src="/app_dev.php/js/bar.js"></script>

つまり、これらのファイルへのリクエストは、PHP のフロントコントローラ ( app_dev.php ) の中で設定された特別なルートを通じて実行されます。 assetic バンドルに設定された特別なルートを経由しています。これはつまり、あなたが dev モードでは、アセットをダンプする必要はありません。 自動的に含まれるのです。 また、ファイルにフィルタを適用することもできます。 たとえば、次のようにすると cssrewrite フィルタを適用しています。

{% stylesheets 'bundles/acme_foo/css/*' filter='cssrewrite' %}
    <link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}

フロントエンドアセットの出力をプログラム的に変更したいと思ったとき、 -  assetic を使えば、カスタムtwigフィルタを書くことでそれが可能になります。

しかし、これはパフォーマンス重視です。 実稼働環境では、PHPフロントコントローラファイルを通して各ファイルを個別にリンクする代わりに、生成されたHTMLは次のようになります。

<script type="text/javascript" src="/js/as5s31l.js"></script>

どこが as5s31l.js はどこから来るのでしょうか? それが、この assetic:dump コマンドの仕業です。 それは を結合します。 を結合し、静的でキャッシュ可能なファイルを作成します。

必要なこと

プロジェクトで特に指示されていない限り、常に assets:installassetic:dump というのは、サードパーティのバンドルがこれらのコマンドを使用しているかどうかがわからないからです。 必要なのは assetic:dump にあるアプリケーションをデプロイするか表示する前に prod モードで表示します。 順序は関係ありません。

バンドルがどのシステムを使うべきかについてですが、もしあなたが上記の内容を読んで assetic が何をしてくれるのかわからない場合は assets . で大丈夫です。