我的应用程序中的大多数控制器都有一个基本控制器,如下所示:
class BaseController extends \Symfony\Bundle\FrameworkBundle\Controller\Controller
{
/**
*
* @Route("/")
*/
public function indexAction($partial = false)
{
$this->partial = $partial;
$this->currentAction = 'index';
return $this->r();
}
}
这伴随着一组模板,这些模板可以是带有布局的完整 html 页面,也可以只是内容。这是通过模板中的一行完成的:
{% extends this.partial ? "SomeProject:_base:partial.html.twig" : "SomeProject::layout.html.twig" %}
(this
控制器参考在哪里)。
然后可以在其他控制器中呈现这些模板,而无需重复布局。
{% render 'SomeProject:SomeController:index' with { "partial":true } %}
我对这种方法的问题是:
- 每个需要成为部分控制器的动作都必须有一个
$partial
参数。由于大多数动作都有可能是局部的,因此所有控制器都必须撒上它。 - 每个潜在的部分动作都必须有
$this->partial = $partial
线条,很容易忘记。
通过使用一些 Symfony 或 Twig 魔法(覆盖render
标签等),它有一种更清洁的方式。为了摆脱上述问题?