2015-02-20 5 views
0

В Symfony 2.5.9, я стараюсь, чтобы переопределить SwiftMailerHandler из монологаКак переопределить обработчик ядра Monolog?

class MySwiftMailerHandler extends SwiftMailerHandler 
{ 
    public function __construct(\Swift_Mailer $mailer, $message, $level = Logger::ERROR, $bubble = true) 
    { 
     $message->setSubject('Lorem ipsum : ' . $message->getSubject()) ; 
     parent::__construct($mailer, $message, $level, $bubble); 
    } 
} 

с сервисом

<service id="my_custom_handler" class="XXXX\Monolog\Handler\MySwiftMailerHandler"> 
    <tag name="monolog.handler.swift"/> <!-- which tag to use ? --> 
</service> 

и конфигурации

monolog: 
    handlers: 
     mail: 
      type:   fingers_crossed 
      action_level: critical 
      handler:  custom #before buffered 
     custom: 
      type: service 
      id: my_custom_handler 
     #buffered: 
     # type: buffer 
     # handler: swift 
     swift: 
      type:  swift_mailer 
      from_email: %monolog_from_email% 
      to_email: %monolog_to_email% 
      subject: 'Error' 
      level:  critical 

Но мой обработчик имеет следующие ошибки: «__construct () должен быть экземпляром Swift_Mailer, не указанным ... »

Как создать мой новый сервис-обработчик? Плохой конфигурационный монологи? Какой тег использовать? Как сделать ? Спасибо!

+0

Когда вы объявляете свое обслуживание, вы не передаете ни одну из необходимых зависимостей. Посоветуйте вам проверить, как это делает основной код, и немного читайте об инъекциях зависимостей в документации. –

ответ

1

Это сложно. Все классы обработчика определяются как параметры в пределах monolog.xml внутри MonologBundle. (MonologExtension кажется, экземпляр и настроить их внутри большого заявления переключателя.)

Для переопределения SwiftMailerHandler укажите параметр класс так:

parameters: ... monolog.handler.swift_mailer.class: XXXX\Monolog\Handler\MySwiftMailerHandler

Нет необходимости возиться с ней с услугами, теги и т. д.

Я использую этот подход для переопределения SwiftMailerHandler::buildMessage() и динамического изменения темы сообщения электронной почты.

+0

Это не работает с новой версией monolog/bundle (3.0) – tomcyr