Symfony2で遊んでいますが、CSSおよびJSTwigのファイルを含む問題があります=テンプレート。
Webs/HomeBundle
という名前のバンドルがあり、その中にtwigテンプレートファイルをレンダリングするHomeController
とindexAction
があります。
public function indexAction()
{
return $this->render("WebsHomeBundle:Home:index.html.twig");
}
これは簡単です。ここでやりたいことは、このTwigテンプレート内にいくつかのCSSファイルとJSファイルを含めることです。テンプレートは次のようになります。
<!DOCTYPE html>
<html>
<head>
{% block stylesheets %}
<link href="{{ asset('css/main.css') }}" type="text/css" rel="stylesheet" />
{% endblock %}
</head>
<body>
</body>
</html>
含めるファイルmain.css
ファイルは次の場所にあります。
Webs/HomeController/Resources/public/css/main.css
私の質問は基本的に、Twigテンプレート内に単純なCSSファイルをどのように含めるのですか?
Twig asset()
関数を使用していますが、正しいCSSパスにヒットしません。また、コンソールで次のコマンドを実行します。
app/console assets:install web
これにより、新しいフォルダーが作成されました
/web/bundles/webshome/...
これはただにリンクしています
src/Webs/HomeController/Resources/public/
右?
Bundle/Resources/public
フォルダーに入れても大丈夫ですか?それは彼らにとって正しい場所ですか?バンドルパスをasset()
関数に渡すことを除いて、あなたはすべて正しいことをしています。
documentation -によれば、これは次のようになります。
{{ asset('bundles/webshome/css/main.css') }}
Tip:--symlink
キーを使用してasset:installを呼び出すこともできるため、Webフォルダーにシンボリックリンクが作成されます。これは、js
またはcss
の変更を頻繁に適用する場合に非常に便利です(この方法でsrc/YouBundle/Resources/public
に適用された変更はweb
フォルダーにすぐに反映され、assets:install
もう一度):
app/console assets:install web --symlink
また、子テンプレートにアセットをaddしたい場合は、Twigに対してparent()
メソッドを呼び出すことができますブロック。あなたの場合、次のようになります:
{% block stylesheets %}
{{ parent() }}
<link href="{{ asset('bundles/webshome/css/main.css') }}" rel="stylesheet">
{% endblock %}
そして、%stylesheets%(アセティック機能)タグを使用できます:
{% stylesheets
"@MainBundle/Resources/public/colorbox/colorbox.css"
"%kerner.root_dir%/Resources/css/main.css"
%}
<link type="text/css" rel="stylesheet" media="all" href="{{ asset_url }}" />
{% endstylesheets %}
パラメーター(%parameter_name%)としてcssへのパスを書き込むことができます。
このバリアントの詳細: http://symfony.com/doc/current/cookbook/assetic/asset_management.html
他の答えは有効ですが、 Official Symfony Best Practices ガイドは、異なるバンドルではなく、web/
フォルダーを使用してすべてのアセットを保存することを推奨しています。
Webアセットを数十の異なるバンドルに分散させると、それらの管理がより困難になります。すべてのアプリケーションアセットが1つの場所にあれば、デザイナーの生活はずっと楽になります。
リンクははるかに簡潔であるため、テンプレートはアセットを集中化することからも恩恵を受けます[...]
たとえば、ボタンバンドル内のボタンにのみ必要な数行のスタイルなど、マイクロバンドル内にマイクロアセットのみを配置することを提案することで、これに追加します。
Silexを使用している場合、依存関係としてSymfony Assetを追加します。
composer require symfony/asset
その後、登録できますAsset Service Provider:
$app->register(new Silex\Provider\AssetServiceProvider(), array(
'assets.version' => 'v1',
'assets.version_format' => '%s?version=%s',
'assets.named_packages' => array(
'css' => array(
'version' => 'css2',
'base_path' => __DIR__.'/../public_html/resources/css'
),
'images' => array(
'base_urls' => array(
'https://img.example.com'
)
),
),
));
次に、ヘッドセクションのTwigテンプレートファイルで:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
{% block head %}
<link rel="stylesheet" href="{{ asset('style.css') }}" />
{% endblock %}
</head>
<body>
</body>
</html>