2017-01-27 11 views
2

今、私のアプリケーションをLaravel 5.3から5.4にアップグレードしようとしています。 Mailjetのカスタムメールドライバを除いて、すべて正常に動作しました。カスタムメールドライバで共有からシングルトンへの切り替え

Mailjetドライバを登録するカスタムMailServiceProviderを設定しました。今すぐリンクしています(5.3とうまく機能しています)。

<?php 

namespace App\Providers; 

class MailServiceProvider extends \Illuminate\Mail\MailServiceProvider 
{ 
    public function registerSwiftTransport() 
    { 
     $this->app['swift.transport'] = $this->app->share(function ($app) { 
      return new \App\Mail\Transport\TransportManager($app); 
     }); 
    } 
} 

Laravel 5.4では、サポートされていない共有機能です。 singleton()を使用することをお勧めします。だから私はサーバー的なものを試しました。

public function registerSwiftTransport() 
{ 
    $this->app->singleton('swift.transport', function ($app) { 
     return new \App\Mail\Transport\TransportManager($app); 
    }); 
} 

をしかし、ここでHandleExceptions.phpはスペースが不足しているので、私は500エラーを取得する:私は作業溶液に非常に近くなった次のコードでと思います。

私はまた、アプリケーションの\プロバイダを\ \にファイルTransportManager.php私のカスタムを移動しようとしたと、このような戻りライン変更:ここで

return new \App\Providers\TransportManager($app); 

それはクラスのアプリケーション\プロバイダーは、\ TransportManager 'が見つかりません」と言うが"しかし、はい、ファイルは正しいディレクトリにあります。

いくつかの簡単な手順で欠落している共有機能の問題を解決する方法や、メールドライブ全体のインストールを徹底的に考えなければならないと思いますか?

おかげ

+0

トランスポートプロバイダの名前空間とは何ですか? – Paras

+0

ええ、私はファイルを移動した後、App \ Providersに設定するのを忘れていました。しかし、私がそれをこのように変更すると、私も500エラーが発生します。 –

答えて

1

あなたTransportManagerクラス内の何かが間違っている場合を除き、あなたの現在のコードは動作するはずのように、それが見えます。しかし、新しいメールドライバを実装する方が正しい方法があり、問題が完全に回避されます。

\Illuminate\Mail\TransportManagerクラスは、\Illuminate\Support\Managerクラスを拡張しています。つまり、最初にクラス全体をオーバーライドしなくても、独自のカスタムドライバを追加できるように、クラスにはextend()メソッドがあります。

だから、代わりにあなたの現在のソリューションの、どちらかあなたのAppServiceProvider、または新しいサービスプロバイダに、あなたのような何かを探している必要があります。サービスプロバイダは、あなたがmailjetメールドライバを使用することができるようになると

<?php 

namespace App\Providers; 

class MailjetServiceProvider extends \Illuminate\Support\ServiceProvider 
{ 
    public function boot() 
    { 
     $this->app['swift.transport']->extend('mailjet', function($app) { 
      // your logic for building $transport 

      return $transport; 
     }); 
    } 
} 

、そのクロージャーを呼び出してドライバを解決します。

関連する問題