无法猜测如何从请求信息中获取Doctrine实例

时间:2012-03-15 19:08:22

标签: php symfony doctrine-orm

我有这个“500内部服务器错误 - LogicException:无法猜测如何从请求信息中获取Doctrine实例”。

这是我的控制器的动作定义:

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

并且它不起作用,可能是因为Doctrine 2无法“猜测”......所以我如何让Doctrine 2猜测,好吧?

5 个答案:

答案 0 :(得分:28)

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)
{
  // ...
}

答案 1 :(得分:9)

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

答案 2 :(得分: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)

答案 3 :(得分:0)

@ 1ed是对的,您应该定义@paramConverter以获取Player实例或Gather实例。

答案 4 :(得分:0)

@Route注释的签名上的参数必须与实体字段匹配,以便Doctrine自动进行转换。

否则,您需要使用注释@ParamConverter手动进行转换,因为它会在其他响应中提及。