2016-09-27 126 views
0

我使用Laravel 4.2覆蓋sendSwiftMessage()Laravel Swiftmailer定製

通過user3158900給出的答案是Laravel 5. * 任何一個可以幫助我的4.2版本?

我想用我自己的函數重寫sendSwiftMessage()受保護的函數。

sendSwiftMessage()位於

「供應商/ laravel /框架/ SRC /照亮/郵件/ Mailer.php」

我創建了一個

Lib/Mailer/CustomMailer.php

並將文件夾Lib設置爲在作曲家(PSR4)中自動加載。 我現在可以通過編寫在我的控制器中調用/加載我的功能:

new Lib \ Mailer \ CustomMailer;

這是我的文件看起來像:

Mail::send(xxxx); 

<?php namespace Lib\Mailer; 

class CustomMailer extends \Illuminate\Mail\Mailer { 

    /** 
    * Send a Swift Message instance. 
    * 
    * @param \Swift_Message $message 
    * @return void 
    */ 
    protected function sendSwiftMessage($message) 
    { 
     if (strpos($message->toString(), '[email protected]') == true) { 
      Log::info('Not sending mail to [email protected]'); 
     } 
     else 
     { 
      if ($this->events) 
      { 
       $this->events->fire('mailer.sending', array($message)); 
      } 

      if (! $this->pretending) 
      { 
       $this->swift->send($message, $this->failedRecipients); 
      } 
      elseif (isset($this->logger)) 
      { 
       $this->logMessage($message); 
      } 
     } 
    } 

} 

然而,當我與Swiftmailer在我的控制器做實例發送電子郵件沒有使用該sendSwiftMessage()函數

我的問題:我如何使Swiftmailer/Laravel在發送消息時使用我自定義的sendSwiftMessage()函數,如果我不想修改當前所有的控制器使用Mail :: send()代碼

+0

user3158900的答案是Laravel 5. * 任何人都可以幫助我使用4.2版本? – raphjutras

回答

0

想我得到了這個想法,但我得到一個錯誤,但我認爲這是對你的,因爲你的自定義類正在使用一個不存在的屬性,所以這裏的解決方案無論如何。

boot()方法AppServiceProvider.php,我已經添加了以下內容:

$this->app->singleton('customMailer', function($app) { 
    return new CustomMailer(
     $app['view'], $app['swift.mailer'], $app['events'] 
    ); 
}); 

app/Lib/Mailer文件夾中,我添加了另一個類的門面。

namespace App\Lib\Mailer; 

use Illuminate\Support\Facades\Facade; 

class Mail extends Facade 
{ 
    /** 
    * Get the registered name of the component. 
    * 
    * @return string 
    */ 
    protected static function getFacadeAccessor() 
    { 
     return 'customMailer'; 
    } 
} 

config/app.php,我已經取代了Mail別名有以下...

'Mail' => App\Lib\Mailer\Mail::class, 

這應該是所有你需要做的。

另外一件事,我只注意到你的名字空間中缺少App,這就解釋了爲什麼你必須將Lib文件夾添加到自動加載器。如果通過將App\添加到開頭來正確命名它以保持與PSR-4內聯,則無需向composer.json文件添加任何內容即可獲取其他類。

+0

你能告訴我AppServiceProvider.php應該位於哪裏和文件的開頭,謝謝!我正在嘗試它,但仍然卡在那裏 – raphjutras

+0

哦,你正在使用Laravel 4.對不起,這段代碼可能無法正常工作。 – user3158900

+0

的確,我無法使它工作:( – raphjutras