2015-03-20 10 views
7

मैं एक सेवा में अपने अनुवाद स्ट्रिंग इंजेक्षन करना चाहते हैं, तो मैं सेवा परिभाषा इस प्रयोग किया जाता है बनाम:Symfony: LoggingTranslator अनुवादक

arguments: [@doctrine.orm.entity_manager, @translator] 

मैं निर्माता में यह प्रयोग किया है:

public function __construct(\Doctrine\ORM\EntityManager $entityManager, \Symfony\Component\Translation\Translator $translator) 

लेकिन मुझे यह त्रुटि मिलती है:

.... __construct() must be an instance of Symfony\Component\Translation\Translator, instance of Symfony\Component\Translation\LoggingTranslator given... 

दोनों के बीच क्या अंतर है?

+0

कृपया पर विचार इस [प्रलेखन] (/ ब्लॉग/न्यू-इन-सिम्फनी-2-6-सुधार-के-अनुवाद-घटक) – falinsky

+1

इस सेवा को इंजेक्ट करने का प्रयास करें: 'translator.default' – Matteo

+0

धन्यवाद। translator.default काम करता है :) – b85411

उत्तर

11

संस्करण 2.6 से news announcement के अनुसार, अनुवादक घटक को translator.default जैसी सेवा के रूप में परिभाषित किया गया है।

arguments: [@doctrine.orm.entity_manager, @translator.default] 
+0

हाय @ बी 85411 अगर इस या किसी भी उत्तर ने आपके प्रश्न को हल किया है तो कृपया चेक-मार्क पर क्लिक करके [इसे स्वीकार करना] (http://meta.stackexchange.com/q/5234/179419) पर विचार करें। यह व्यापक समुदाय को इंगित करता है कि आपको समाधान मिला है और उत्तर देने वाले और स्वयं दोनों को कुछ प्रतिष्ठा देता है। ऐसा करने का कोई दायित्व नहीं है। – Matteo

+1

मैंने यह जवाब स्वीकार कर लिया है। – b85411

7

Symfony साथ

arguments: [@doctrine.orm.entity_manager, @translator] 

2,6 शुरू की लापता अनुवाद लॉगिन करने के बाद इस बात के लिए "अनुवादक" सेवा उर्फ ​​करने के लिए प्रॉक्सी किसी तरह से बदल दिया गया:

तो आपकी सेवा परिभाषा बदलने वास्तविक अनुवादक वर्ग।

जैसा कि दूसरे (और वर्तमान में स्वीकृत) उत्तर में कहा गया है, वास्तविक अनुवादक वर्ग अब "translator.default" सेवा पर है। लेकिन "अनुवादक" के बजाय इस सेवा का उपयोग इस नई सिम्फनी सुविधा को अक्षम कर देगा, ताकि आप इससे बच सकें।

आपकी समस्या का समाधान है और अभी भी नई सुविधाओं की पहुंच है, TranslatorInterface के किसी भी कार्यान्वयन स्वीकार करने के लिए अपने निर्माता के कोड बदलने के लिए: http://symfony.com

public function __construct(\Doctrine\ORM\EntityManager $entityManager, \Symfony\Component\Translation\TranslatorInterface $translator) 
+1

यह बेहतर जवाब है। मैं हमेशा '@ अनुवादक' (कभी भी .default संस्करण) का उपयोग नहीं करता और लॉगिंग को सक्षम/अक्षम करता हूं जैसा आप चाहते हैं। फिर सेवाओं में टाइप करने के लिए '\ Symfony \ घटक \ अनुवाद \ TranslatorInterface' का उपयोग करें। –