7

私は現在、Symfony2.1.0を使用してWebアプリケーションを開発しています。

この本のテンプレートの章を読み、アセット(現在は単一のスタイルシート)をWebページに含めようとしています。

この本で言及されている3レベルの継承システムを使用していますが、現在、アプリケーションの構造は次のようになっています。

  • app / Resources / views /
    • base.html.twig:タイトルスタイルシートボディブロックを含むベーステンプレート。
  • src / My / PageBundle / Resources / views
    • layout.html.twig:レイアウトテンプレート(ベーステンプレートを拡張)、メインスタイルシートをスタイルシートブロックに追加し、 navigation.html.twigを含む本文ブロックを上書きしてコンテンツブロックを定義する
    • layout-admin.html.twig:上記と同じですが、navigation-admin.html.twigを含みます
    • src / My / PageBundle / Resources / views / Main
      • 標準テンプレート、レイアウトテンプレートを拡張し、そのコンテンツブロックを上書きする
    • src / My / PageBundle / Resources / views / Administration
      • 管理テンプレート。上記と同じですが、管理レイアウトテンプレートを拡張します。
  • src / My / PageBundle / Resources / public / css
    • main.css:メインスタイルシート

ご覧のとおり、スタイルシートをバンドルに入れました。これが良い習慣かどうかはわかりません。

さて、layout.htmlにこれを追加しました:

{% block stylesheets %}
    {{ parent() }}

    <link rel="stylesheet" type="text/css" href="{{ asset('css/main.css)' }}" />
{% endblock %}

ただしasset('css/main.css')、にリンクしているだけですが/css/main.css./app/console assets:installアセットはにインストールされweb/bundles/mypagebundle/ます。この方法でバンドル名が公開されるという事実は好きではありません(これにより、ユーザーは私がSymfonyを使用していると疑う可能性があり、Webページの内部を内部に保持するのが好きです)。assets:installアセットをインストールするディレクトリを変更することはできますか?アセットをweb/に手動でインストールするのは面倒なようです。

スクリプト/スタイルシートを自動的に縮小して1つのファイルにまとめて保存する可能性が個人的に気に入っているので、アセット管理にAsseticを使用することも考えています。ただし、異なるレベルのスタイルシートを含める場合、つまり3レベルの継承システムでは機能しない場合、これは不可能であると聞いています。それを回避することは可能ですか?また、Asseticを使用すると、バンドル名を公開しないようにすることができますか?

4

1 に答える 1

4

アセットを使用すると、すべての問題に対処できます。

異なるレベルのスタイルシートを含めると、これは不可能だと聞きました。つまり、3レベルの継承システムでは機能しません。

可能ですが、各レベルのcssファイルが生成されます(実際には、asset()の場合と同じです)。

例:

レイアウト:

{% block stylesheets %}
    {{ parent() }}
    {% stylesheets 'main.css' %}
        <link rel="stylesheet" type="text/css" href="{{ asset_url }}" />
    {% endstylesheets %}
{% endblock %}

サブテンプレート:

{% block stylesheets %}
    {{ parent() }}
    {% stylesheets 'sub.css' %}
        <link rel="stylesheet" type="text/css" href="{{ asset_url }}" />
    {% endstylesheets %}
{% endblock %}

結果:

<link rel="stylesheet" type="text/css" href="..." />
<link rel="stylesheet" type="text/css" href="..." />

または、サブテンプレートでスタイルシートブロックを完全にオーバーライドして、1つのスタイルシートのみが生成されるようにすることもできます(ただし、乾燥度は低くなります)。

{% block stylesheets %}
    {% stylesheets 'main.css' 'sub.css' %}
        <link rel="stylesheet" type="text/css" href="{{ asset_url }}" />
    {% endstylesheets %}
{% endblock %}

結果(本番/非デバッグ):

<link rel="stylesheet" type="text/css" href="..." />
于 2012-09-16T19:21:31.073 に答える