2012-08-16 70 views
38

我有下面这段代码:我怎么能在Symfony2的路线可选参数

/** 
* Lists all User entities. 
* 
* @Route("/{cid}",defaults={"cid" = null},name="user") 
* @Template() 
*/ 
public function indexAction($cid=null) 
{} 

现在,如果我输入site/user/1那么它的工作原理,但如果我键入site/user/它说:

No route found 

如何我可以让这两条路线工作吗?

回答

60

及早去site/user(注意没有反斜杠最后)。

一般它应该工作,我有相对类似的配置工作。

但如果一切都失败了,你总是可以定义多个路线相同的作用,即

/** 
* Lists all User entities. 
* 
* @Route("/", name="user_no_cid") 
* @Route("/{cid}", name="user") 
* @Template() 
*/ 
public function indexAction($cid=null) 
{ 
33

使用您的路由配置的YML文件,并在你的路由参数添加了ID的默认值是这样的:

user: 
    pattern: /site/user/{id} 
    defaults: { _controller: YourBundle:Default:index, id: 1 } 

查看文档here

+3

的OP显然是在利用路线注释在控制器 – phpguru 2016-01-29 01:03:34

+7

然而,他的回答让我和其他几个人对未来 – Andrew 2016-06-08 23:35:59

+3

注意:'pattern'关键是在Symfony的3 – 2016-09-05 21:03:03

5

你也可以用GET参数做到这一点,例如

/** 
* @param Request $request 
* 
* @return Response 
*/ 
public function displayDetailAction(Request $request) 
{ 
    if ($courseId = $request->query->get('courseId')) {