我正在编写一个 Bundle 来为我们正在开发的网站提供主题。其他捆绑包调用核心捆绑包以通过 Twig 进行模板化,而这个主题捆绑包会扭曲该核心捆绑包。
我通过在主题包类中实现 getParent() 方法以返回核心包的名称来完成此操作,从而导致 Symfony2 在查看核心包之前先查看主题包(基本上是任何文件)。
现在,这在开发模式下效果很好,但是,当我尝试在生产模式下,并且我的 CSS/JS 文件合并为一个时,生成的路径解析为 404 页面,并且所有样式都丢失了。
我已经清除了 dev 和 production 缓存,以及rm -rf
dev 和 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() 包装在注释标签中。完全删除线没有帮助。