gpt4 book ai didi

php - Symfony2 : How to properly include assets in conjunction with Twig template inheritance?

转载 作者:可可西里 更新时间:2023-11-01 12:57:00 25 4
gpt4 key购买 nike

我目前正在使用 Symfony 2.1.0 开发网络应用程序。

我已经通读了 Templating chapter这本书的一部分,我正在尝试在我的网页中包含 Assets (现在,它只是一个样式表)。

我正在使用 Three-level inheritance system这是书中提到的,我的应用程序结构目前是这样的:

  • app/Resources/views/
    • base.html.twig: 基本模板,包含标题样式表正文 block 。
  • src/My/PageBundle/Resources/views
    • layout.html.twig: 布局模板(扩展基本模板),将主样式表附加到 stylesheet block ,并覆盖 body block ,包括 navigation.html.twig 和定义一个 content block
    • layout-admin.html.twig:与上面相同,但包括 navigation-admin.html.twig
    • src/My/PageBundle/Resources/views/Main
      • 标准模板,扩展布局模板并覆盖其内容 block
    • 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 : installweb/bundles/mypagebundle/ 中安装 Assets 。我不喜欢这样的事实,我的包名称会公开可见(这可能会让用户怀疑我在使用 Symfony,而且我喜欢保留网页的内部结构,好吧,内部结构)。是否可以更改 assets:install 将安装 Assets 的目录?在 web/中手动安装 Assets 对我来说似乎很乏味。

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

最佳答案

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

I hear that this is not possible if you include stylesheets at different levels, i.e. it wouldn't work with the three-level inheritance system

你可以,但它会为每个级别生成一个 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="..." />

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

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

关于php - Symfony2 : How to properly include assets in conjunction with Twig template inheritance?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12449218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com