我编写了一个自定义的 Twig 函数,它应该呈现一些 HTML。我的第一个想法是为渲染逻辑创建一个新的控制器并在 Twig 扩展中使用它。但它不起作用,因为它在调用{{ button() }}
模板时会引发此错误:
致命错误异常:错误:在 /FOO/VENDOR/SYMFONY/SYMFONY/SRC/SYMFONY/BUNDLE/FRAMEWORKBUNDLE/CONTROLLER/CONTROLLER.PHP 第 106 行中的非对象上调用成员函数 GET()
Twig 扩展基本上可以工作(我已经实现了一些这里没有显示的简单助手)。
控制器(去除了不必要的代码):
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class ButtonController extends Controller {
public function showAction()
{
[...]
return $this->render(
'AcmeDemoBundle:Default:button.html.twig', array($vars)
);
}
}
树枝扩展:
class AcmeExtension extends \Twig_Extension {
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('button', array($this, 'button'), array('is_safe' => array('html'))),
);
}
public function button()
{
$controller = new ButtonController();
return $controller->showAction();
}
}