2016-11-15 87 views
0

我想创造我的控制器,如果它不是在传递一个处理category空值的行动的第一项Symfony3:默认的参数得到,即使默认为null的

我已经试过注释2条路线(。一个没有/{category}),但在任何情况下,当我没有在URL中提供一个类别时,Symfony会检索它可以找到的第一个类别。

@Route("/accounts/{id}/categories/{category}", defaults={"category" = null}) 

的动作定义是这样的:

public function categoryAction(Request $request, Account $account, Category $category) 

我也曾在行动试图$category = null,但这并不有所作为。

如果该类别未在url中定义,我如何使此动作的值为$category,值为null

更新:

需要明确的是,这里是我的Xdebug的结果的意见充分的注释和功能定义:

/** 
* @Route("/accounts/{id}/categories") 
* @Route("/accounts/{id}/categories/{category}, defaults={"category" = null}") 
*/ 
public function categoryAction(Request $request, Account $account, Category $category = null) 
    { 
     // When I set a breakpoint here, $category is populated with 
     // the first category result in the database. 
     // This is when visiting: http://localhost:8000/accounts/1/categories 

回答

0

可以定义多个路线相同的动作,也许你可以试试:

/** 
* @Route("/accounts/{id}/categories") 
* @Route("/accounts/{id}/categories/{category}") 
* @Template() 
*/ 
public function categoryAction(Request $request, Account $account, Category $category) 
{ 

如果您尝试访问/accounts/{id}/categories$categorynull

+0

也许我的问题是在别的地方。这就是我想要对2条路线进行注释的意思,其中一条没有/分类。即使这是注释的唯一路由,并且我使用php来默认'$ category = null','$ category'仍然会填充一个值。 – Coder1

0

我相信这是改变你应该:

/** 
* @Route("/accounts/{id}/categories", defaults={"category" = null}") 
* @Route("/accounts/{id}/categories/{category}) 
*/ 
public function categoryAction(Request $request, Account $account, Category $category) 
{ 
    ... 

你可以尝试,让我们知道吗?我没有测试过,但我认为它是正确的。

+0

我刚试过这个,结果相同。在访问'http:// localhost:8000/accounts/1/categories'时,'$ category'填充db中的第一个类别值。 (还是)感谢你的建议。 – Coder1

+0

嗨Coder1。你能编辑你的文章并告诉我们什么控制台命令'php bin/console debug:router'显示?谢谢! –