我试图建立自己的基于Symfony 2的CMS,因为我交换了工作,现在需要一些symfony练习,但在尝试做一些合理的路线时遇到困难。在Zend中,使用preDispatch是可能的,所以我希望Symfony 2也会有类似的东西。
考虑以下网址:http://www.example.com/page_one/sub_page/another_sub_page/yet_another_sub/
我想要实现的是让http://www.example.com/page_one/
与某个控制器匹配,并获取具有与url_string
参数相同的页面内容。然后http://www.example.com/page_one/sub_page/
也应与同一个控制器匹配,但为URL的sub_page
部分呈现内容。
路线必须与n
部分匹配,因为我无法知道结构的深度。
所以我不会接受像
/{slug1} or
/{slug1}/{slug2} or
/{slug1}/{slug2}/{slug3}
因为那是废话。
我打算将这条路线作为路线配置中的最后一条路线,所以如果在其他路线上有一些匹配,它们将被取而代之,而这一条尽管它是最重要的路线将是最后的选择匹配的东西。
答案 0 :(得分:1)
使用以下配置将匹配所有网址,整个路径将传递到控制器" slug1 / slug2 / slug3"。
<强> SymfonyBundle / DefaultBundle /资源/配置/ routing.yml中:强>
symfony_default_page:
path: /{path}
defaults: { _controller: SymfonyBundle:Default:page }
requirements:
path: "^.+"
或**您也可以在需求路径中使用正则表达式。这将排除&#34; admin&#34;,&#34;登录&#34;,&#34;博客&#34;,但是如果您简化并简单地将路由放在正确位置会更容易像你说的那样订购
requirements:
path: "^(?!admin|login|blog).+"
应用/配置/ routing.yml中强>
通过最后导入默认捆绑路由,这意味着上面的任何路由yml文件都将具有优先级,因此不匹配将捕获任何URL的默认路由。
SymfonyAdminBundle:
resource: "@SymfonyAdminBundle/Resources/config/routing.yml"
prefix: /admin
#import this last
SymfonyDefaultBundle:
resource: "@SymfonyDefaultBundle/Resources/config/routing.yml"
prefix: /
<强>控制器:强>
class DefaultController extends Controller
{
public function pageAction($path)
{
//You could split the URL and handle accordingly, also filter / escape?
$parts = explode("/", $path);
}
}