Symfony2:如何与Twig模板继承一起正确包含资产?

Ini*_*men 7 php assets symfony twig symfony-2.1

我目前正在使用Symfony 2.1.0开发Web应用程序.

我已经阅读了本书的模板章节,我试图在我的网页中包含资产(现在,它只是一个样式表).

我正在使用本书中提到的三级继承系统,我的应用程序结构目前如下所示:

  • 应用程序/资源/视图/
    • base.html.twig:基本模板,包含标题,样式表正文块.
  • SRC /我的/ PageBundle /资源/视图
    • layout.html.twig:布局模板(扩展基本模板),将主样式表附加到样式表块,并覆盖body块,包括navigation.html.twig和定义内容
    • layout-admin.html.twig:与上面相同,但包括navigation-admin.html.twig
    • SRC /我的/ PageBundle /资源/视图/主
      • 标准模板,扩展布局模板并覆盖其内容
    • SRC /我的/ PageBundle /资源/视图/管理
      • 管理模板.与上面相同,但扩展了管理布局模板.
  • SRC /我的/ PageBundle /资源/公/ CSS
    • main.css:主样式表

如您所见,我已将样式表放入我的包中.我不知道这是不是好习惯.

现在,问题是,在layout.html中我添加了这个:

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

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

asset('css/main.css')只是链接到/css/main.css,而./app/console assets:install安装资产web/bundles/mypagebundle/.我不喜欢这样的事实,我的捆绑名称将是公开可见的(这可能会让用户怀疑我正在使用Symfony,我喜欢保留我的网页的内部,好吧,内部).是否可以更改assets:install安装资产的目录?在web /中手动安装资产对我来说似乎很乏味.

我也在考虑使用Assetic进行资产管理,因为我个人喜欢自动缩小我的脚本/样式表并将它们全部存储在一个文件中.但是,我听说如果在不同级别包含样式表,这是不可能的,即它不适用于三级继承系统.有可能解决这个问题吗?另外,使用Assetic会让我隐藏我的捆绑名称吗?

Arn*_*anc 4

使用 assetic 可以解决您的所有问题。

我听说如果您包含不同级别的样式表,这是不可能的,即它不适用于三级继承系统

你可以,但它会为每个级别生成一个 css 文件(实际上就像 asset() 一样)。

例子:

布局:

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

子模板:

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

结果:

<link rel="stylesheet" type="text/css" href="..." />
<link rel="stylesheet" type="text/css" href="..." />
Run Code Online (Sandbox Code Playgroud)

或者,子模板可以完全覆盖样式表块,以便只生成一个样式表(但它不那么干燥):

{% block stylesheets %}
    {% stylesheets 'main.css' 'sub.css' %}
        <link rel="stylesheet" type="text/css" href="{{ asset_url }}" />
    {% endstylesheets %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

结果(生产/非调试):

<link rel="stylesheet" type="text/css" href="..." />
Run Code Online (Sandbox Code Playgroud)