7

我目前正在使用 Symfony 2.1.0 开发一个 Web 应用程序。

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

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

  • 应用程序/资源/视图/
    • base.html.twig:基本模板,包含标题样式表正文块。
  • src/我的/PageBundle/资源/视图
    • layout.html.twig:布局模板(扩展基本模板),将主样式表附加到样式表块,覆盖正文块,包括navigation.html.twig和定义内容
    • layout-admin.html.twig:和上面一样,但是包括navigation-admin.html.twig
    • src/My/PageBundle/Resources/views/Main
      • 标准模板,扩展布局模板并覆盖其内容
    • src/我的/PageBundle/资源/视图/管理
      • 管理模板。与上述相同,但扩展了管理布局模板。
  • src/我的/PageBundle/资源/公共/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,而且我喜欢保留我网页的内部结构,嗯,内部的)。是否可以更改assets:install安装资产的目录?在我看来,手动安装 web/.js 中的资产似乎很乏味。

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

4

1 回答 1

4

使用资产将解决您的所有问题。

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

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

例子:

布局:

{% 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="..." />

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

{% 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 回答