수색…


의존성 주입 패턴

메일 전송을 관리하는 클래스 관리자 (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