twig - Twig 弃用了“base_template_class”如何用较新的 Twig 覆盖或挂钩“渲染”?
问题描述
我有自己的模板类,它做了这样的事情:
public function render(array $context)
{
// App & Twig
$app = App::getInstance();
$twig = $app->twig;
// Figure out which textdomain should be used
$prevTextDomain = textdomain(null);
textdomain($twig->getRenderTextDomain());
// Added helper variables, like isAdmin, isApi, isFront, am(assetmanager).
$context = array_merge($context, $twig->getRenderAttributes());
// Render
$data = parent::render($context);
// Set back to previous text domain
if (isset($prevTextDomain))
{
textdomain($prevTextDomain);
}
return $data;
}
但是现在这已被弃用,但我还没有看到任何新的方法?必须有,为什么他们会弃用东西而不给出实现相同目标的新方法?那么没有 应该怎么做base_template_class
呢?
我看过一些关于 doEnterNode/doLeaveNode 钩子是新的推荐方式的讨论。但是据我所知,我可能可以在那里实现该文本域逻辑,但是如何将自定义变量添加到上下文中呢?
此外,doEnterNode/doLeaveNode 听起来比覆盖渲染增加了更多开销。
所以问题是,如何在没有 的情况下实现这一目标base_template_class
?
更新7.1.2020
仍然没有解决方案,但也许我应该评论我所做的解决方法。
这不是完美的解决方案,但就我而言,至少现在似乎已经足够了。
因为我认为在重要的情况下我不会调用模板的渲染,所以将我的所有template->render
调用更改为myTwig->render
执行 textdomain 和调用的调用twig->render
。
但是如果在某些情况下模板会调用另一个模板的渲染,并且它需要使用不同的文本域,那么我认为这不起作用并且我没有任何解决方案可以提供。所以让这个仍然开放。
解决方案
推荐阅读
- webpack - 纱线安装失败,模块解析失败:意外字符“@”(1:0)
- python - 我的字符串和变量不能在这个 tkinter 函数中一起工作?
- code-coverage - AOSP 本机代码覆盖率 - 未找到覆盖率数据
- xampp - 在打开文件时使用 PhpStorm XAMPP 它使用端口 63442 而不是默认端口,我该如何更改它?
- go - 在回合制游戏中同步围棋套路
- ibm-doors - IBM DOORS - 基于属性更新需求
- react-native - 当用户按下返回按钮时如何自动重新加载或刷新整个屏幕。在本机反应
- php - 如何使用 php 将 mysql 数据库中的数据分组到 html 表中
- javascript - 为以下函数-node.js 编写单元测试用例
- web-services - 哪种方法更适合 XSD 中的枚举值?模式验证还是业务验证?