twig - 干预模板渲染
问题描述
我有一个控制器方法,我用它来“收集”要分配给模板的变量。我已经重写了控制器的 render() 方法来合并“收集”和渲染参数并将它们分配给模板。
例子:
class Controller extends \Symfony\Bundle\FrameworkBundle\Controller\Controller
{
private $jsVars = [];
protected function addJsVar($name, $value)
{
$this->jsVars[$name] = $value;
}
public function render($view, array $parameters = [], Response $response = null)
{
return parent::render($view, array_merge($parameters, ['jsVars' => $this->jsVars], $response);
}
public function indexAction()
{
// collect variables for template
$this->addJsVar('foo', 'bar');
return $this->render('@App/index.html.twig', ['foo2' => 'bar2']);
}
}
我刚刚升级到 Symfony 3.4,它抱怨说自从 Symfony4 以来,我不允许重写 render() 方法,因为它将是最终的。
我怎样才能使它无缝工作,即不定义新方法?
- 我知道 Twig 全局变量,但这些对我没有帮助
- 我可以使用服务来收集变量并将该服务注入 Twig 但这似乎很奇怪
- 有没有我可以听的事件,例如 TwigPreRender 或 smth?
解决方案
您可以像这样从 Twig 内部渲染控制器:
{{ render(controller('App\\Controller\\YourController::yourAction', { 'args': 'hi' })) }}
文档在这里
推荐阅读
- javascript - 加载后从屏幕底部开始获取网页的问题
- alfresco - 无法使用 Alfresco 公共 Java API 创建节点,访问被拒绝。系统当前处于只读模式
- vb.net - Visual Basic 中缺少 txt 文件
- image-processing - Keras ImageDataGenerator 可以在 -1 和 1 之间重新缩放图像吗
- r - 如何使用R检查文件中单词列表的字符串
- android - 浏览器覆盖遮挡页面底部
- java - 如何突出显示 javafx Textarea 中的文本?
- python - 如何连续多次从列表中生成随机项目,但每次生成不同的项目
- node.js - Redis 按模式删除
- excel - 使用条件从excel中的字符串中提取数字