我已經編寫了一個自定義的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