0

这解释起来有点复杂。我的用例如下:

假设我有以下文件系统结构:

/client/name/web/dashboard.twig <- extends dashboard.twig - file might not exist
/app/name/web/dashboard.twig    <- extends dashboard.twig - file might not exist
/web/dashboard.twig             <- extends layout.twig    - file always exists
/web/layout.twig                <- the base template      - file always exists

假设我运行$twig->render('dashboard.twig');,我希望它从最顶层开始,dashboard.twig并按照上面指定的顺序继续运行。

当前的问题是 twig 最终陷入无限循环,每次都尝试加载第一个模板文件。在食谱部分,有一个例子可以避免这种情况,它使用路径。由于几个问题,这在我的情况下不起作用:

  1. 的开发者/client/name/web/dashboard.twig不应该知道该/app/name/web/dashboard.twig文件。
  2. 仍然无法识别name路径段,因此路径概念不起作用。

我能想到的唯一解决方案是以某种方式插入 twig 并告诉它在加载模板文件后立即“弹出”模板文件,以消除无限循环。

API 文档的这一部分似乎很有用: http: //twig.sensiolabs.org/api/master/Twig_Loader_Filesystem.html

4

1 回答 1

0

感谢Charles的回答,我已经能够找到解决问题的方法。

主要思想是使用将扩展文件的文件名添加到稍后传递给加载器的名称的代码来重载“扩展”Twig 标记。

于 2013-05-09T07:17:09.357 回答