2016-11-15 88 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'顯示?謝謝! –