2017-09-16 39 views
0

queueを使用して電子メールアドレスのリストに電子メールを送信します。キューを使用せずに私のコードは正常に動作しているが、キューと、それは次のエラーを示しています:私はキュードライバとしてdatabaseを使用していますLaravel 5.3の電子メールキューで 'Closure'のシリアライズが許可されていません

Exception in Queue.php line 86: Serialization of 'Closure' is not allowed 

    in /home/hizbul/Development/Projects/Laravel/fastskool/vendor/laravel/framework/src/Illuminate/Queue/Queue.php line 86 
    at serialize(object(SendMessageToStudent)) in Queue.php line 86 
    at Queue->createPayload(object(SendMessageToStudent), '') in DatabaseQueue.php line 81 
    at DatabaseQueue->push(object(SendMessageToStudent)) in Dispatcher.php line 184 
    at Dispatcher->pushCommandToQueue(object(DatabaseQueue), object(SendMessageToStudent)) in Dispatcher.php line 159 
    at Dispatcher->dispatchToQueue(object(SendMessageToStudent)) in Dispatcher.php line 73 
    at Dispatcher->dispatch(object(SendMessageToStudent)) in DispatchesJobs.php line 17 
    at Controller->dispatch(object(SendMessageToStudent)) in MessageController.php line 49 
    at MessageController->store(object(Request)) 
    at call_user_func_array(array(object(MessageController), 'store'), array(object(Request))) in Controller.php line 55 
    at Controller->callAction('store', array(object(Request))) in ControllerDispatcher.php line 44 
    at ControllerDispatcher->dispatch(object(Route), object(MessageController), 'store') in Route.php line 189 
    at Route->runController() in Route.php line 144 
    at Route->run(object(Request)) in Router.php line 653 
    at Router->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 53 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StaffAndAdmin.php line 40 
    at StaffAndAdmin->handle(object(Request), object(Closure)) in Pipeline.php line 137 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ModuleManager.php line 29 
    at ModuleManager->handle(object(Request), object(Closure)) in Pipeline.php line 137 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in SwitchDatabaseConnection.php line 36 
    at SwitchDatabaseConnection->handle(object(Request), object(Closure)) in Pipeline.php line 137 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in SubstituteBindings.php line 41 
    at SubstituteBindings->handle(object(Request), object(Closure)) in Pipeline.php line 137 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in VerifyCsrfToken.php line 65 
    at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 137 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49 
    at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 137 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 64 
    at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 137 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37 
    at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 137 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59 
    at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 137 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 104 
    at Pipeline->then(object(Closure)) in Router.php line 655 
    at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 629 
    at Router->dispatchToRoute(object(Request)) in Router.php line 607 
    at Router->dispatch(object(Request)) in Kernel.php line 268 
    at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 53 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Debugbar.php line 51 
    at Debugbar->handle(object(Request), object(Closure)) in Pipeline.php line 137 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 46 
    at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 137 
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 104 
    at Pipeline->then(object(Closure)) in Kernel.php line 150 
    at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 117 
    at Kernel->handle(object(Request)) in index.php line 68 

class SendMessageToStudent implements ShouldQueue 
{ 
    use InteractsWithQueue, Queueable, SerializesModels; 

    private $data; 

    /** 
    * Create a new job instance. 
    * 
    * @param Request $request 
    */ 
    public function __construct(Request $request) 
    { 
     $this->data = $request; 
    } 

    /** 
    * Execute the job. 
    * 
    * @return void 
    */ 
    public function handle() 
    { 
     $student = $this->data; 
     $arrStudent = (new Message())->getEmailAddressList($student); 
     Mail::to($arrStudent)->send(new MessageSent($student)); 
    } 
} 

とディスパッチャコード::私は実現可能な解決策を期待してい

$this->dispatch(new SendMessageToStudent($request)); 

は私のキュージョブハンドラのコードです。

$this->message = new Message(); 

と、ハンドルに直接それを初期化:

答えて

1

リクエストをシリアル化することはできません。雄弁なモデルだけがシリアル化され、シリアル化されません。参照:https://laravel.com/docs/5.2/queues#writing-job-classes

$ requestの代わりに$ request-> all()を使用してください。 Requestはクロージャとして扱われるからです。

0

は、コンストラクタからこの行を削除してください。

$student = $this->data; 
$arrStudent = (new Message())->getEmailAddressList($student); 
Mail::to($arrStudent)->send(new MessageSent($student)); 
+0

解決策のコードリファクタにすぎません。 – hizbul25

+0

@ hizbul25私は同じような解決策の週に直面した、それは私のためにこのように働いた。 –

関連する問題