2012-03-15 8 views
14

Mam ten błąd "500 Wewnętrzny serwer - LogicException: Nie można zgadnąć, w jaki sposób uzyskać instancję Doctrine z informacji o żądaniu".Nie można zgadnąć, jak uzyskać instancję Doctrine z informacji o żądaniach.

Oto definicja działania mojego kontrolera:

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

I to nie działa, prawdopodobnie dlatego Doktryny 2 nie można „odgadnąć” ... Więc jak mam zrobić Doctrine 2 przypuszczenie, i dobrze?

+2

Powinieneś rzucić okiem na adnotację [@ParamConverter] (http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html). – 1ed

Odpowiedz

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

Nie mogę znaleźć żadnej pomocy w złej (?) W dokumentacji paramconverter, ponieważ nie opisuje, jak to działa, jak to odgadnie z więcej niż jednego parametrach i takie tam. Plus nie jestem pewien, czy jest to potrzebne, ponieważ to, co napisałem, działa poprawnie.

Mój mistyk nie używał imienia mego przypisywania, więc doktryna nie mogła odgadnąć, że jest słuszna. Zmieniłem {player_name} na {name} i {gather_id} na {id}.

Potem zmienił nazwiska mojego id w swoich jednostek z „id” do „id_gather” i „id_player”, więc teraz jestem w stanie to zrobić:

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

który jest o wiele bardziej skuteczny niż

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

Teraz zastanawiam się, w jaki sposób można dokonać tej pracy

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

@ 1ed ma rację, powinieneś zdefiniować @paramConverter, aby uzyskać instancję Player lub instancję Gather.

+0

Jak mogę użyć @paramConverter w pliku konfiguracyjnym YAML? – linuxatico

+0

@paramConverter jest implementowany przez SensioFrameworkExtraBundle. Nie sądzę, że pakiet eksponuje tę funkcjonalność poprzez plik konfiguracyjny yml o xml, myślę, że jedynym sposobem jest użycie adnotacji. – ftassi

3

spróbuj tego:

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

Doktryna nie wie, jak korzystać z re parametry questów w celu zapytania o encje określone w sygnaturze funkcji.

Będziesz musiał poradzić przez podanie pewnych informacji mapowania:

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

Parametry sprawie podpisania adnotacji @Route musi pasować pola podmiotów, tak że doktryna czyni automatycznie konwersja.

W przeciwnym razie należy wykonać konwersję ręcznie, korzystając z adnotacji @ParamConverter, jak wspomniano w innych odpowiedziach.

Powiązane problemy