私は次のように私のアプリのほとんどのコントローラーのベースコントローラーを持っています:
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
タグをオーバーライドするなど)ことで、よりクリーンな方法があります。上記の問題を取り除くために?