我已经编写了一个自定义的Twig函数来呈现一些HTML。我的第一个想法是为渲染逻辑创建一个新的控制器,并在Twig扩展中使用它。但是,因为它调用模板{{ button() }}
时抛出这个错误它不工作:如何在使用Symfony2的自定义Twig扩展中渲染控制器
FATALERROREXCEPTION:错误:调用一个成员函数get()方法在非对象IN/FOO /供应商/ Symfony的/ Symfony的/ SRC/SYMFONY/BUNDLE/FRAMEWORKBUNDLE/CONTROLLER/CONTROLLER.PHP LINE 106
小枝的扩展基本上可以工作(我已经实现了一些简单的帮手,这里没有显示)。
的控制器(去除不必要的代码):
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();
}
}
您不适当地注射容器。但我真正的问题是,为什么你想在控制器中做到这一点? – Gerry
Button正在呈现一个构造,其中有一些或多或少复杂的业务逻辑。所以我认为在一个控制器中执行此操作可以使它自己的模板成为首选方式。你会推荐什么? – acme
这个逻辑可能也可以在另一个类或服务中实现。 – Gerry