Не удалось угадать, как получить экземпляр Doctrine из информации запроса

У меня есть эта «500 Internal Server Error – LogicException: Невозможно угадать, как получить экземпляр Doctrine из информации запроса ».

Вот определение действия моего контроллера:

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

И это не работает, возможно, потому, что Doctrine 2 не может «догадаться» … Итак, как я могу угадать Doctrine 2 и хорошо?

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) { // ... } 
 /** * @Route("/gatherplayer/{name}/{id}") * @Template() */ public function createAction(Player $player, Gather $gather) 

Я не нашел никакой помощи в документации paramconverter (бедный?), Поскольку он не описывает, как это работает, как он догадывается с несколькими параметрами и т. Д. Плюс я не уверен, что это необходимо, так как то, что я только что написал, работает правильно.

Мой мистик не должен был использовать имя моих атрибутов, поэтому доктрина не могла догадаться. Я изменил {player_name} на {name} и {gather_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) 

попробуй это:

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

@ 1ed правильно, вы должны определить @paramConverter, чтобы получить экземпляр Player или экземпляр Gather.

Параметры подписи аннотации @Route должны совпадать с полями сущностей, поэтому Doctrine автоматически преобразует конверсию.

В противном случае вам нужно сделать преобразование вручную, используя аннотацию @ParamConverter, как упоминалось в других ответах.