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

2022-08-30 18:55:17

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

以下是我的控制器的操作定义:

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

它不起作用,可能是因为教义2不能“猜测”......那么,我该如何让教义2猜到呢?


答案 1

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

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

我没有在paramconverter(可怜的?)文档中找到任何帮助,因为它没有描述它是如何工作的,它如何用多个参数和东西来猜测。另外,我不确定是否需要它,因为我刚刚写的东西工作正常。

我的建议是不要使用我的属性名称,所以教义无法猜对。我将 {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)

推荐