我有这个“500内部服务器错误 - LogicException:无法猜测如何从请求信息中获取Doctrine实例”。
这是我的控制器的动作定义:
/**
* @Route("/gatherplayer/{player_name}/{gather_id}")
* @Template()
*/
public function createAction(Player $player, Gather $gather)
{
// ...
}
并且它不起作用,可能是因为Doctrine 2无法“猜测”......所以我如何让Doctrine 2猜测,好吧?
答案 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手动进行转换,因为它会在其他响应中提及。