如何在Symfony 2和Twig中包含CSS文件?

Lim*_*eni 63 symfony twig

我正在玩Symfony2,我在Twig模板中遇到包括CSSJS文件的问题.

我有一个名为包Webs/HomeBundle里面,我有HomeControllerindexAction呈现一个树枝模板文件:

public function indexAction()
{
    return $this->render("WebsHomeBundle:Home:index.html.twig");
}
Run Code Online (Sandbox Code Playgroud)

所以这很容易.现在我想要做的是在这个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>
Run Code Online (Sandbox Code Playgroud)

我想要包含的main.css文件,文件位于:

Webs/HomeController/Resources/public/css/main.css
Run Code Online (Sandbox Code Playgroud)

所以我的问题基本上就是如何在Twig模板中包含简单的CSS文件?

我正在使用Twig asset()功能,它只是没有找到正确的CSS路径.另外,我在控制台中运行此命令:

app/console assets:install web
Run Code Online (Sandbox Code Playgroud)

这创建了一个新文件夹

/web/bundles/webshome/...
Run Code Online (Sandbox Code Playgroud)

这只是链接到

src/Webs/HomeController/Resources/public/
Run Code Online (Sandbox Code Playgroud)

对?

问题

  1. 您在哪里放置资产文件,JS,CSS和图像?把它们放在Bundle/Resources/public文件夹中可以吗?这是他们的合适位置吗?
  2. 如何使用资产功能将这些资产文件包含在Twig模板中?如果它们在公共文件夹中,我如何包含它们?
  3. 我应该配置其他东西吗?

Vit*_*ian 76

除了将捆绑路径传递给asset()函数之外,您正在做正确的事情.

根据文档 - 在您的示例中,这应如下所示:

{{ asset('bundles/webshome/css/main.css') }}
Run Code Online (Sandbox Code Playgroud)

提示:您还可以调用资产:使用--symlink密钥安装,因此它将在Web文件夹中创建符号链接.当您经常应用jscss更改时,这非常有用(以这种方式,您应用的更改src/YouBundle/Resources/public将立即反映在web文件夹中而无需assets:install再次调用):

app/console assets:install web --symlink
Run Code Online (Sandbox Code Playgroud)

此外,如果您希望在子模板中添加一些资源,可以调用parent()Twig块的方法.在你的情况下,它将是这样的:

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

    <link href="{{ asset('bundles/webshome/css/main.css') }}" rel="stylesheet">
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

  • app/console资产:安装--watch会在资产变化时自动重新生成资产 (2认同)

Zhu*_*ukV 12

并且您可以使用%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 %}
Run Code Online (Sandbox Code Playgroud)

您可以将css的路径写为参数(%parameter_name%).

有关此变体的更多信息:http://symfony.com/doc/current/cookbook/assetic/asset_management.html