Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 捕获细枝模板的所有路由_Php_Symfony_Twig - Fatal编程技术网

Php 捕获细枝模板的所有路由

Php 捕获细枝模板的所有路由,php,symfony,twig,Php,Symfony,Twig,我正在创建一个由几个应用程序(我为每个应用程序创建了一个捆绑包)和一些“半静态”页面组成的网站 此半静态页面是不需要控制器的小树枝模板,因为它们只包含HTML代码,在某些情况下,使用{%extends%}使用特定模板,如果授予{%if('ROLE\u ADMIN')%%}仅向管理员显示特定内容 我知道Symfony 2.1引入的FrameworkBundle:Template:Template控制器,但我不能使用这个控制器,因为我不能为设计器创建的每个“静态”页面添加路由 此外,这些静态页面的U

我正在创建一个由几个应用程序(我为每个应用程序创建了一个捆绑包)和一些“半静态”页面组成的网站

此半静态页面是不需要控制器的小树枝模板,因为它们只包含HTML代码,在某些情况下,使用
{%extends%}
使用特定模板,如果授予
{%if('ROLE\u ADMIN')%%}
仅向管理员显示特定内容

我知道Symfony 2.1引入的
FrameworkBundle:Template:Template
控制器,但我不能使用这个控制器,因为我不能为设计器创建的每个“静态”页面添加路由

此外,这些静态页面的URL可能有一个或多个子目录(/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;
}
/**
*@Route(“/{part1}”)
*@Route(“/{part1}/{part2}”)
*@Route(“/{part1}/{part2}/{part3}”)
*@Route(“/{part1}/{part2}/{part3}/{part4}”)
*@Route(“/{part1}/{part2}/{part3}/{part4}/{part5}”)
*/
公共函数代理($part1='',$part2='',$part3='',$part4='',$part5=''){
$parameters=func_get_args();
$parts=array_filter($parameters,'trim');
$templatePath=“NectStaticBundle:Default”;
对于($i=0;$icontainer->get('templating')->renderResponse($templatePath);
返回$response;
}
我知道这是一个巨大的丑陋的黑客和它吸,所以我想知道是否有人知道更好的方法来实现这一点

/**
 * @Route("/{part1}/{part2}/{part3}/{part4}/{part5}")
 */
 public function proxyAction($part1=null, $part2=null, $part3=null, $part4=null, $part5=null)
 {
      $parts        = array_filter(array($part1, $part2, $part3, $part4, $part5), 'is_null');
      $template     = array_pop($parts);
      $templatePath = 'NectStaticBundle:Default/' .implode("/", $parts) . '/' . $template . '.html.twig'; 

      $response = $this->container->get('templating')->renderResponse($templatePath);
return $response;
  }

没有测试,但无论如何。。你明白了吗:)

请查看我的答案,如果缺少/不起作用,请发表评论-否则请接受:)