2012-03-15 9 views
14

मुझे यह "500 आंतरिक सर्वर त्रुटि - LogicException: यह जानने में असमर्थ है कि अनुरोध जानकारी से सिद्धांत उदाहरण कैसे प्राप्त करें"।अनुरोध जानकारी से डॉक्टरेट उदाहरण प्राप्त करने का अनुमान लगाने में असमर्थ

यहाँ है मेरी नियंत्रक की कार्रवाई परिभाषा:

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

और यह काम नहीं करता है शायद इसलिए है क्योंकि सिद्धांत 2 नहीं "अनुमान" कर सकते हैं ... तो मैं कैसे सिद्धांत 2 अनुमान लगाने के लिए करते हैं, और अच्छी तरह से?

+2

आपको [@ParamConverter] (http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html) एनोटेशन पर एक नज़र डालना चाहिए। – 1ed

उत्तर

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

मैं के बाद से यह वर्णन नहीं है कि यह कैसे काम करता है, paramconverter के (? गरीब) दस्तावेज में किसी भी मदद नहीं मिली है, यह कैसे एक से अधिक मापदंडों के साथ अनुमान लगा लेता है और सामान। इसके अलावा मुझे यकीन नहीं है कि इसकी आवश्यकता है क्योंकि मैंने अभी लिखा है ठीक से काम करता है।

मेरा रहस्यवादी मेरे गुणों के नाम का उपयोग नहीं करना था, इसलिए सिद्धांत सही अनुमान नहीं लगा सका। मैंने {player_name} को {name} और {collect_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) 
0

@ 1ed सही है, आपको प्लेयर उदाहरण या एकत्रित उदाहरण प्राप्त करने के लिए @paramConverter को परिभाषित करना चाहिए।

+0

मैं एक YAML कॉन्फ़िगरेशन फ़ाइल में @paramConverter का उपयोग कैसे कर सकता हूं? – linuxatico

+0

@paramConverter को सेंसियोफ्रेमवर्क एक्स्ट्राबंडल द्वारा कार्यान्वित किया गया है। मुझे नहीं लगता कि बंडल yml o xml config फ़ाइल के माध्यम से इस कार्यक्षमता का खुलासा करता है, मुझे लगता है कि एकमात्र तरीका एनोटेशन का उपयोग कर रहा है। – ftassi

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) 
22

सिद्धांत कैसे फिर से उपयोग करने के लिए पता नहीं है कर सकते हैं फ़ंक्शन के हस्ताक्षर में निर्दिष्ट इकाइयों को क्वेरी करने के लिए खोज पैरामीटर। , संस्थाओं फ़ील्ड मिलान इतना है कि सिद्धांत स्वचालित रूप से रूपांतरण बनाता चाहिए @Route एनोटेशन के हस्ताक्षर पर

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

पैरामीटर:

आप कुछ मैपिंग जानकारी निर्दिष्ट द्वारा यह मदद करने के लिए की आवश्यकता होगी।

अन्यथा आपको एनोटेशन @ पैरामोनवर्टर का उपयोग करके कनवर्टेशन मैन्युअल रूप से करने की आवश्यकता है क्योंकि इसे अन्य प्रतिक्रियाओं पर उल्लेख किया गया है।

संबंधित मुद्दे