いくつかのアプリ (それぞれにバンドルを作成しました) と多数の「半静的」ページで構成される Web サイトを作成しています。
この半静的ページは、コントローラーを必要としない Twig テンプレートです。これは、HTML コードのみを含み、場合によって{% extends %}
は特定のテンプレートを使用して、{% if is_granted('ROLE_ADMIN') %}
特定のコンテンツを管理者のみに表示するためです。
Symfony 2.1 で導入されたコントローラーについては知っていFrameworkBundle:Template:template
ますが、デザイナーが作成する「静的」ページごとにルートを追加できないため、これを使用できません。
さらに、これらの静的ページの URL には 1 つ以上のサブディレクトリ (/one、/one/two、/one/two/three...) がある場合があるため、デザイナーが URL をmywebsite.com/part1/part2/part3 彼はビューを StaticBundle/Resources/views/part1/part2/part3.html.twig に保存し、コントローラーはパス NectStaticBundle:Default:part1/part2/part3.html.twig を生成します
/**
* @Route("/{part1}")
* @Route("/{part1}/{part2}")
* @Route("/{part1}/{part2}/{part3}")
* @Route("/{part1}/{part2}/{part3}/{part4}")
* @Route("/{part1}/{part2}/{part3}/{part4}/{part5}")
*/
public function proxyAction($part1='', $part2='', $part3='', $part4='', $part5='') {
$parameters = func_get_args();
$parts = array_filter($parameters, 'trim');
$templatePath = "NectStaticBundle:Default";
for($i = 0; $i < count($parts) - 1; $i++) {
if($dir = $parts[$i])
$templatePath .= "/$dir";
}
$name = $parts[$i];
$templatePath .= "/$name.html.twig";
$templatePath = preg_replace("/\//", ':', $templatePath, 1);
$response = $this->container->get('templating')->renderResponse($templatePath);
return $response;
}
私はこれが大きな醜いハックであることを知っているので、誰かがこれを達成するためのより良い方法を知っているかどうか疑問に思っていました.