2012-03-15 14 views
14

この "500 Internal Server Error - 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

答えて

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

をとスタッフ。私がちょうど書いたものが適切に動作するので、それが必要であるかどうかは分かりません。

私の誤解は私のattributsの名前を使用していなかったので、教義は正しく理解できませんでした。 {player_name}を{name}に、{gather_id}を{id}に変更しました。

は、それから私はので、私は今それを行うことができるよ「id_gather」と「id_player」と「ID」から自分の実体に私のIDの名前を変更:

多くの方が効果的である
/** 
* @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が正しい場合は、PlayerインスタンスまたはGatherインスタンスを取得するために@paramConverterを定義する必要があります。

+0

YAML設定ファイルで@paramConverterを使うには? – linuxatico

+0

@paramConverterはSensioFrameworkExtraBundleによって実装されています。私はこのバンドルがyml o xml設定ファイルを介してこの機能を公開しているとは思わないが、私は唯一の方法はアノテーションを使用していると思う。 – ftassi

3

この試してみてください。それは、複数のパラメータを推測する方法、それがどのように動作するかについては説明しませんので、私は、paramconverterの(?貧しい)ドキュメントの任意のヘルプを見つけることができませんでした

/** 
* @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

Doctrineは再使用する方法を知りません。この作業を行うことができますどのように思ったんだけどクエストパラメータを使用して、関数の署名で指定されたエンティティを照会します。

あなたは、いくつかのマッピング情報を指定することで、それを支援する必要があります。

/** 
    * @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注釈の署名にDoctrineは自動的にconvertionを作るように、エンティティのフィールドと一致する必要があります。

それ以外の場合は、@ParamConverter注釈を使用して手動で変換を行う必要があります。

関連する問題