2017-04-26 7 views
0

を許可されていない私は正常に機能メール通知を作成しましたが、それをキューしようとすると、私は次のエラーを取得:以下Laravelのキューイング可能通知エラー:「閉鎖」のシリアル化が

Uncaught Exception: Serialization of 'Closure' is not allowed in /vendor/laravel/framework/src/Illuminate/Queue/Queue.php:125

を私は、エラーを引き起こしていると考えている私のコードです:

public function toMail($notifiable) 
{ 
    $view_file = 'emails.verifyEmail'; 
    $view = View::make($view_file, ['invitationToken' => $this->invitationToken, 'team_name' => $this->team->name, 'team_domain' => $this->team->domain ]); 

    $view = new HtmlString(with(new CssToInlineStyles)->convert($view)); 

    return (new MailMessage) 
     ->subject('Email Verification') 
     ->view('emails.htmlBlank', ['bodyContent' => $view]); 
} 

私はそれをシリアライズしようとしている「閉鎖」はどこから来ている正確にわかりません。私はView::makeの末尾に->render()をつけてみましたが、それは違いを生じさせていないようです。私はそれがMailMessageview機能と関係があると信じていますが、私は本当にわかりません。

再び、この通知は、キューに入れられていないときに完全に機能します。

ご協力いただければ幸いです。

+0

実際にその行にあると思う場合は、エラーを出している行からトレースして正確に特定の行を特定するか、ステップのデバッグを使用するか、それぞれの後に "exit"ステートメントを使用して、それで、あなたはその問題について家に帰ることができます。 –

+0

@PaulJeromeBordalloどのラインがエラーを引き起こしているのか知っています。スタックトレースは、すべてがコアラベルコードを指しているので役に立ちません。私はエラーが何であるか知っている、私はちょうどそれを修正する方法を知らない。 –

答えて

1

質問がかなり古くても、私は将来の参照のためにこれを掲載しています。

問題は、キューが通知インスタンスをシリアル化しようとしたときに発生します。これは、通知オブジェクトのすべてのプロパティをシリアル化することによって行われます。私は同じようなことをしていたので、私は何かをしていたので、

public function __construct(\Exception $ex){ 
    $this->exception = $exception; 
} 

私の通知のクラスに入れた。 SendQueuedNotificationに通知がラップされると、キューハンドラによってシリアル化されます。このプロセス中に、SendQueuedNotificationのすべてのプロパティが、カスタム通知インスタンスとそのプロパティを含めてシリアル化されます。シリアライザがシリアル化しようとするとすべてが失敗する$exceptionインスタンス。なんらかの理由で、例外クラスはそのプロパティ内にクロージャーを含んでいる可能性があるため、直列化できません。だから今

public function __construct(\Exception $ex) 
{ 
    $this->exceptionClass = get_class($ex); 
    $this->exceptionMessage = $ex->getMessage(); 
    $this->exceptionLine = $ex->getFile() . '@' . $ex->getLine(); 
    $this->exceptionCode = $ex->getCode(); 
} 

通知プロパティのすべてが完全に直列化可能であり、すべてが期待どおりに機能し、次のように私は、コンストラクタを変更したために働いたものを。

別の解決方法は、__wakeup()__sleep()メソッドを使用して、通知インスタンスのシリアル化と逆シリアル化をカスタマイズすることです。

ご迷惑をおかけして申し訳ございません。

関連する問題