0

我正在编写一个 Bundle 来为我们正在开发的网站提供主题。其他捆绑包调用核心捆绑包以通过 Twig 进行模板化,而这个主题捆绑包会扭曲该核心捆绑包。

我通过在主题包类中实现 getParent() 方法以返回核心包的名称来完成此操作,从而导致 Symfony2 在查看核心包之前先查看主题包(基本上是任何文件)。

现在,这在开发模式下效果很好,但是,当我尝试在生产模式下,并且我的 CSS/JS 文件合并为一个时,生成的路径解析为 404 页面,并且所有样式都丢失了。

我已经清除了 dev 和 production 缓存,以及rm -rfdev 和 prod 目录。调用php app/console assetic:dump --env=prod --no-debug返回:

$ php app/console assetic:dump --env=prod --no-debug
Dumping all prod assets.
Debug mode is off.

10:25:40 [file+] /webapps/xxxbundle/app/../web/css/f996955.css
10:25:46 [file+] /webapps/xxxbundle/app/../web/js/f307b3f.js
10:26:05 [file+] /webapps/xxxbundle/app/../web/css/55d26a0.css
10:26:05 [file+] /webapps/xxxbundle/app/../web/js/ccfc30e.js



  [RuntimeException]
  The source file "/webapps/xxxclient/app/../web/bundles/xxxbundle/js/modernizer.custom.96376.js"
  does not exist.



assetic:dump [--watch] [--force] [--period="..."] [write_to]

面向 web 的 css 和 js 目录显示:

$ ls web/css
55d26a0.css  f996955.css
$ ls web/js
f307b3f.js

缺少 JS 文件可能是由于另一个未使用的捆绑包。主要问题是,模板正在寻找:

<link rel="stylesheet" type="text/css" media="screen" href="/css/2a6fc23.css">
<script src="/js/adf6a7a.js"></script>

两者都不存在。有什么想法或方向吗?

[[ 编辑 ]]

进一步审查,即使资产生产缓存引用这些文件,但它们从未被创建......为什么?……

[[ 模板]]

(覆盖模板)

{% extends 'FrontBundle:Frame:base.html.twig' %}
{% block title %}{{ page.title }}{% endblock %}

{% block wrapper %}

    {# route: {{ route }} #}

    {{ rendered | raw }}

{% endblock %}

(覆盖模板)

{% extends 'SkinBundle::layout.html.twig' %}

{# Site Name #}
{% block site_name %}
    {{ page.title }} | {{ parent() }}
{% endblock %}

布局扩展了一个基本模板,它只是一个站点的外壳,在覆盖的过程中,可以说 CSS 如下:

{% extends 'FrontBundle:Frame:default.html.twig' %}
{# Stylesheets #}
{% block stylesheets %}
{# no execute {{ parent() }}#}
{% stylesheets
    filter='cssrewrite'
    'bundles/core/css/normalize.css'
    'bundles/skin/css/main.css'
    %}
        <link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}">
    {% endstylesheets %}
{% endblock %}

在 Base 模板中声明为:

        {# Stylesheets #}
        {% block stylesheets %}
            {% stylesheets
                filter='cssrewrite'
                'bundles/core/css/normalize.css'
                'bundles/front/css/global.css'
                'bundles/page/css/page.css'
            %}
            <link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}">
            {% endstylesheets %}
            <!-- Page -->
        {% endblock %}

不需要这些样式表,这就是为什么我将 parent() 包装在注释标签中。完全删除线没有帮助。

4

1 回答 1

0

parent()在彻底清除缓存并重建后,删除确实有所帮助。

我将很快在这里制作一个错误票,因为由于某种原因,parent()在注释 ( {# ... #}) 中包含的内容会破坏生成,即使{# ... #}模板编译器不应该解析甚至考虑其中的任何内容。

棘手的错误。

于 2013-02-19T18:26:00.857 回答