4

MainBundle(ホームページ)、SecurityBundle(ログイン、登録)、MessageBundle(メッセージシステム)、ShopBundleのさまざまなバンドルがあります。

また、3段階のレイアウトスキーマ(:: base.html.twig、AcmeMainBundle :: layout.html.twig、AcmeMainBundle:Default:index.html.twig)に従います。

しかし、アプリケーション(jqueryなど)を介して一般的なjsライブラリを共有し、base.css(いくつかの基本クラス、背景、フォントなどを設定する)を定義するのに問題があります。

では、資産のサポートを失うことなく、共有のcssとjsを使用するための最良のアプローチは何でしょうか。

1つのアイデアは、すべてのグローバルjsとcss、およびいくつかのレイアウトファイルを保持するCommonBundleを作成することですが、これがこれを処理するための最良の方法ではないと思います...

4

2 に答える 2

17

すべてのバンドル間で共通のアセットを共有する場合は、それらをapp/Resources/publicディレクトリに配置するのが最善の選択です。例えば:

app/Resources/Public
|-- css
|   `-- base.css
|-- js
|   `-- jquery.js

次に、次のようにレイアウトでそれらを参照できます。

{% block stylesheets %}
  {% stylesheets '../app/Resources/public/css/*' %}
    <link rel="stylesheet" type="text/css" charset="UTF-8" media="all" href="{{ asset_url }}"/>
  {% endstylesheets %}
{% endblock %}

{% block javascripts %}
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
  {% javascripts '../app/Resources/public/js/*' %}
    <script type="text/javascript" src="{{ asset_url }}"></script>
  {% endjavascripts %}
{% endblock %}

備考:ご覧のとおり、jQueryのような一般的なライブラリの場合、Googleでホストされている一般的なキャッシュバージョンを使用するのが最善の選択です。この種の方法により、アプリケーションの応答時間を短縮できます。

于 2012-06-25T15:45:24.123 に答える
0

最近のバージョンのSymfony(2.5)を使用すると、私の場合、fsenartの応答が機能しないことがわかりました。代わりに、共有コンテンツを含むパブリックフォルダーをWebフォルダーに配置します。

web/public
  --js
  --css

次に、メインレイアウトで使用するには、次のコードが機能します。

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

ただし、これが機能するには、子レイアウトでjavascriptブロックを使用するときにTwig parent()関数を呼び出すことを忘れないでください。

于 2015-02-25T23:06:17.523 に答える