【问题标题】:Extend Twig Template - how to do this in PHP? [closed]扩展 Twig 模板 - 如何在 PHP 中执行此操作? [关闭]
【发布时间】:2014-06-28 12:11:33
【问题描述】:

我目前正在寻找定义 twig 的“扩展”标签的类。

背景:我使用 Twig 和 FuelPHP 来创建我的模板。但是,当我对功能进行模块化时(将它们从基本的应用程序文件夹移动到 modules/....),我遇到了障碍。

twig 的文件系统加载器选择第一个提供名称的模板,而不考虑模块上下文。

我想传递extends第二个参数,并以此为基础设置模板搜索路径。

如果有人给我指出正确的课程,我会很高兴

编辑 - 我试图用扩展做的一个例子(这对包含也是如此):http://pastebin.com/Er2wJX9k

【问题讨论】:

  • 你需要你的代码来澄清这一点。
  • 分享您的代码并提供一些解释。如果您没有提供完整的信息,没有人可以为您提供解决方案
  • @altafhussain 我正在尝试做类似pastebin.com/Er2wJX9k 的事情,它采用模块名称,将模板路径限制为模块的视图文件夹,然后使用 getSource 获取模板,而无需弄乱基本的应用程序配置。现在我正在尝试通过扩展实现同样的目标

标签: php twig fuelphp


【解决方案1】:

您不是在寻找实现{% extends "some_path" %} 标记的类,而是在寻找解释"some_path" 部分以从中获取正确树枝文件的类。

每次需要 twig 模板时,您在初始化环境时指定的 Loader 用于从字符串中获取 twig 文件的内容。 Twig 带有 2 个内置加载器:Twig_Loader_FileSystem 用于从指定路径获取 twig 文件,Twig_Loader_String 用于在您提供 twig 代码而不是模板名称时使用。

您可以通过实现Twig_LoaderInterfaceTwig_ExistsLoaderInterface 接口来开发自己的Twig Loader。只需查看位于twig/lib/Twig/Loader 目录中的现有加载器,然后根据需要实现您自己的加载器。例如,$name 参数将包含一个模板“路径”(例如,Module:template.twig),在应用您的自定义逻辑后,您可以返回正确的template.twig 文件的内容。

【讨论】:

  • 我正在寻找一个快速而肮脏的解决方案,如上所述。根据pastebin.com/Er2wJX9k,我已经将一个类似的包含函数切碎在一起。我也在考虑为扩展做这个。虽然理论上你的方法会更好,但对于像我这样的小镇项目来说,它可能已经过头了。
  • 然后,继续使用Loader_FileSystem 并为每个模块添加命名空间。 $loader->addPath("path/to/module/templates", 'moduleName');,然后执行{% extends '@moduleName/template.twig' %}
  • 嗯,是的,听起来可行。谢谢。
猜你喜欢
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 2017-10-13
  • 2019-03-19
  • 2021-10-27
  • 1970-01-01
  • 2016-04-28
  • 1970-01-01
相关资源
最近更新 更多