आपकी सेवा में बाहरी निर्भरता है, विशेष रूप से मेलर सेवा। आप या तो सेवा कंटेनर को इंजेक्ट कर सकते हैं, या मेलर सेवा इंजेक्ट कर सकते हैं।
यदि आपकी सेवा केवल मेलर सेवा की आवश्यकता है और कुछ भी नहीं, तो मैं केवल मेलर सेवा इंजेक्शन देने का सुझाव दूंगा। , अपने वर्ग के भीतर
<service id="my.service" class="Acme\DemoBundle\Service\Hello">
<call method="setMailer">
<argument type="service" id="mailer" />
</call>
</service>
अपने सेटर बारे में:
class Hello
{
protected $mailer;
public function setMailer($mailer)
{
$this->mailer = $mailer;
}
public function sendEmail()
{
$message = \Swift_Message::newInstance()
->setSubject('Hello Email')
->setFrom('[email protected]')
->setTo('[email protected]')
->setBody($this->renderView('HelloBundle:Hello:email.txt.twig', array('name' => $name)))
;
$this->mailer->send($message);
}
}
नोट: प्रस्तुत करने के लिए आप होगा
यहाँ कैसे आप एक सेटर का उपयोग कर मेलर सेवा सुई डीआईसी कॉन्फ़िगर होता है अपने टेम्पलेट को अपने कंट्रोलर के भीतर पास करें और इस ईमेल फ़ंक्शन को पास करें, या टेम्पलेटिंग सेवा इंजेक्ट करें और अपनी सेवा में प्रस्तुत करें।
कन्स्ट्रक्टर इंजेक्शन क्यों नहीं? – igorw
वास्तव में व्यक्तिगत वरीयता। यदि यह वर्ग केवल एक चीज करने जा रहा है तो सुनिश्चित करें, इसे एक कन्स्ट्रक्टर बनाएं। यद्यपि सेवा अधिक कर रही थी, कहें कि कन्स्ट्रक्टर तर्क, प्रारंभिकरण और कई बाहरी निर्भरताएं थीं, यह बहुत तेज़ी से गन्दा हो सकती है। – Alex
'रेंडरव्यू' कहां से आता है? : पी – RedactedProfile