Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to guess how to get a Doctrine instance from the request information

Tags:

I've got this "500 Internal Server Error - LogicException: Unable to guess how to get a Doctrine instance from the request information".

Here is my controller's action definition:

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

And it doesn't work, probably because Doctrine 2 can not "guess"... So how do I make Doctrine 2 guess, and well?

like image 222
copndz Avatar asked Mar 15 '12 19:03

copndz


2 Answers

The Doctrine doesn't know how to use request parameters in order to query entities specified in the function's signature.

You will need to help it by specifying some mapping information:

/**
  * @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)
{
  // ...
}
like image 67
Azr Avatar answered Sep 20 '22 06:09

Azr


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

I didn't find any help in paramconverter's (poor?) documentation, since it doesn't describe how it works, how it guesses with more than one parameters and stuff. Plus I'm not sure it's needed since what I just wrote works properly.

My mystake was not to use the name of my attributs so doctrine couldn't guess right. I changed {player_name} to {name} and {gather_id} to {id}.

Then I changed the names of my id in their entities from "id" to "id_gather" and "id_player" so I'm now able to do that :

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

which is a lot more effective than

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

Now I'm wondering how I can make this work

 /**
  * @Route("/gatherplayer/{player}/{gather}")
  * @Template()
  */
 public function deleteAction(Gather_Player $gather_player)
like image 25
copndz Avatar answered Sep 19 '22 06:09

copndz