首页 > 解决方案 > 干预模板渲染

问题描述

我有一个控制器方法,我用它来“收集”要分配给模板的变量。我已经重写了控制器的 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() 方法,因为它将是最终的。

我怎样才能使它无缝工作,即不定义新方法?

标签: twigsymfony4

解决方案


您可以像这样从 Twig 内部渲染控制器:

{{ render(controller('App\\Controller\\YourController::yourAction', { 'args': 'hi' })) }}

文档在这里


推荐阅读