Я создаю веб-сайт, состоящий из нескольких приложений (я создал комплект для каждого из них) и ряд «semi static».Catch-all route for Twig templates
Эта полустатическая страница представляет собой шаблоны Twig, которым не нужен контроллер, поскольку они содержат только HTML-код, а в некоторых случаях - {% extends %}
, чтобы использовать определенный шаблон и {% if is_granted('ROLE_ADMIN') %}
, чтобы показывать определенный контент только администраторам.
Я знаю о контроллере FrameworkBundle:Template:template
, который представил Symfony 2.1, но я не могу использовать его, потому что и я не могу добавить маршрут для каждой «статической» страницы, создаваемой дизайнером.
Кроме того, URL-адреса этих статических страниц могут содержать один или несколько подкаталогов (/ один,/один/два,/один/два/три ...), поэтому я придумал это решение, где, если дизайнер хочет URL-адрес mywebsite.com/part1/part2/part3, он сохранит представления в StaticBundle/Resources/views/part1/part2/part3.html.twig, и контроллер сгенерирует путь NectStaticBundle: по умолчанию: 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;
}
Я знаю, что это большой уродливый рубить и он сосет, так что мне было интересно, если кто-то знает лучший способ для достижения этой цели.
пожалуйста рассмотреть мой ответ и комментарий, если что-то не хватает/не работает - в противном случае принять пожалуйста :) – nifr