2012-03-15 6 views
14

Tengo este "500 Error interno del servidor - LogicException: No se puede adivinar cómo obtener una instancia de Doctrine a partir de la información de solicitud".No se puede adivinar cómo obtener una instancia de Doctrine a partir de la información de solicitud

Aquí está mi definición de la acción del controlador:

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

Y no funciona, probablemente porque Doctrina 2 no puede "adivinar" ... Entonces, ¿cómo hago para quitar Doctrina 2 conjetura, y bien?

+2

Deberías echar un vistazo a la anotación [@ParamConverter] (http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html). – 1ed

Respuesta

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

no he encontrado ninguna ayuda en la documentación del paramconverter (mala?), Ya que no describe cómo funciona, cómo se adivina con más de parámetros y esas cosas Además, no estoy seguro de que sea necesario, ya que lo que acabo de escribir funciona correctamente.

My mystake no era para usar el nombre de mis atribuciones así que la doctrina no pudo adivinar bien. Cambié {player_name} a {name} y {gather_id} a {id}.

Entonces me cambiaron los nombres de mi identificación en sus entidades de "id" a "id_gather" y "id_player" así que ahora soy capaz de hacer eso:

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

que es mucho más eficaz que

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

Ahora me pregunto cómo puedo hacer este trabajo

/** 
    * @Route("/gatherplayer/{player}/{gather}") 
    * @Template() 
    */ 
public function deleteAction(Gather_Player $gather_player) 
0

@ 1ed es correcto, debe definir un @paramConverter para obtener una instancia de Player o una instancia de Gather.

+0

¿Cómo puedo usar @paramConverter en un archivo de configuración YAML? – linuxatico

+0

@paramConverter es implementado por SensioFrameworkExtraBundle. No creo que el paquete exponga esta funcionalidad a través del archivo de configuración yml o xml, creo que la única forma es usando la anotación. – ftassi

3

probar esto:

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

La doctrina no se sabe cómo utilizar re parámetros de búsqueda para consultar entidades especificadas en la firma de la función.

Tendrá que evitarlo mediante la especificación alguna información de asignación:

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

Los parámetros de la firma de la anotación @Route deben coincidir con los campos de entidades, de manera que automáticamente hace la Doctrina de conversión.

De lo contrario, debe realizar la conversión manualmente utilizando la anotación @ParamConverter tal como se menciona en las otras respuestas.

Cuestiones relacionadas