2012-03-15 16 views
14

我有這個「500內部服務器錯誤 - LogicException:無法猜測如何從請求信息中獲取Doctrine實例」。無法猜測如何從請求信息中獲取Doctrine實例

這裏是我的控制器的操作定義:

/** 
* @Route("/gatherplayer/{player_name}/{gather_id}") 
* @Template() 
*/ 
public function createAction(Player $player, Gather $gather) 
{ 
    // ... 
} 

而且它不工作,可能是因爲教義2無法「猜測」 ......所以我怎麼做學說2個猜測,和好?

+2

你應該看看[@ParamConverter](http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html)註釋。 – 1ed 2012-03-15 20:06:17

回答

6
/** 
* @Route("/gatherplayer/{name}/{id}") 
* @Template() 
*/ 
public function createAction(Player $player, Gather $gather) 

我沒有找到paramconverter的(窮人?)文檔中的任何幫助,因爲它沒有說明它是如何工作,如何與一個以上的參數猜測和東西。另外我不確定這是否需要,因爲我剛寫的東西工作正常。

我的mystake不是使用我的attributs的名稱,所以學說不能猜對。我將{player_name}更改爲{name},將{gather_id}更改爲{id}。

然後,我改變了我的ID的名字在他們的實體從「ID」到「id_gather」和「id_player」所以我現在能夠做到這一點:

/** 
* @Route("/gatherplayer/{id_player}/{id_gather}") 
* @Template() 
*/ 
public function createAction(Player $player, Gather $gather) 

這是很多更有效比

* @Route("/gatherplayer/{id}/{id}") 

現在我想知道怎樣才能使這項工作

/** 
    * @Route("/gatherplayer/{player}/{gather}") 
    * @Template() 
    */ 
public function deleteAction(Gather_Player $gather_player) 
0

@ 1ed是正確的,您應該定義一個@paramConverter以獲得一個Player實例或一個聚集實例。

+0

如何在YAML配置文件中使用@paramConverter? – linuxatico 2012-06-25 15:00:02

+0

@paramConverter由SensioFrameworkExtraBundle實現。我不認爲這個包通過yml或者xml配置文件公開了這個功能,我認爲唯一的方法就是使用註釋。 – ftassi 2012-08-25 20:49:10

3

試試這個:

/** 
* @Route("/gatherplayer/{player_name}/{gather_id}") 
* @ParamConverter("player", class="YourBundle:Player") 
* @ParamConverter("gather", class="YourBundle:Gather") 
* @Template() 
*/ 
public function createAction(Player $player, Gather $gather) 
22

教義不知道如何使用重查詢參數以查詢函數簽名中指定的實體。

您將需要通過指定一些映射信息,以幫助它:

/** 
    * @Route("/gatherplayer/{player_name}/{gather_id}") 
    * 
    * @ParamConverter("player", options={"mapping": {"player_name" : "name"}}) 
    * @ParamConverter("gather", options={"mapping": {"gather_id" : "id"}}) 
    * 
    * @Template() 
    */ 
public function createAction(Player $player, Gather $gather) 
{ 
    // ... 
} 
0

的參數對@Route註釋的簽名必須與實體領域的匹配,從而使學說自動使皈依。

否則,您需要使用註釋@ParamConverter手動進行轉換,因爲它在其他響應中被提及。

相關問題