खोज…


निर्भरता इंजेक्शन पैटर्न

कल्पना कीजिए कि आपके पास मेल भेजने वाले प्रबंधक (जिसे MailManager कहा जाता है) का प्रबंधन करने वाला एक क्लास मैनेजर है।

इसमें आपको भेजे गए मेल्स को लॉग करना होगा। एक अच्छा समाधान है MailManager वर्ग को एक service में बदलना और फिर लॉग बनाने के लिए वर्ग इंजेक्षन करना (उदाहरण के लिए Monolog करना) MailManager में एक सेवा बनाना।

यह करने के लिए :

1- सेवा के रूप में भविष्य के MailManager वर्ग की घोषणा करें (services.yml में)

services:
    mail.manager.class:
        class:     Vendor/YourBundle/Manager/MailManager

2- argument विधि का उपयोग कर लकड़हारा अस्तित्व अस्तित्व सेवा

services:
    mail.manager.class:
        class:    Project/Bundle/Manager/MailManager
        arguments: ["@logger"]    # inject logger service into constructor

3- MailManager क्लास बनाएं

<?php

namespace Project\Bundle\Manager;

use Symfony\Component\HttpKernel\Log\LoggerInterface;

class MailManager
{
  protected $logger;

  //initialized logger object
  public function __construct(LoggerInterface $logger)
  {
     $this->logger = $logger;
  }

   public function sendMail($parameters)
   {
      //some codes to send mail
      
      //example using logger
      $this->logger->info('Mail sending');
   }
}

4- उदाहरण के लिए एक कंट्रोलर में MailManager को कॉल करें

<?php

class TestController extends Controller
{
    public function indexAction()
    {
        //some codes...

        //call mail manager service
        $mailManager = $this->get('mail.manager.class');
        //call 'sendMail' function from this service
        $mailManager->sendMail($parameters);
        
    }
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow