Laravel Jobs Serialization of 'Closure' is not allowed

隐身守侯 提交于 2020-01-24 04:01:48

问题


I would like to send Data to a NewsletterStore Job. But it's failing with the following error. Any suggestions?

I also tried to remove the SerializesModels Models trait. Without any success.

Error

Exception
Serialization of 'Closure' is not allowed

Controller

 public function store(StoreNewsletterRequest $request)
    {
        StoreNewsletterJob::dispatch($request);

        return view('backend.dashboard.index');
    }

Job

protected $request;

    public function __construct($request)
    {
        $this->request = $request;
    }

    /**
     * Execute the job.
     *
     * @return void
     */

    public function handle()
    {
        if(!Newsletter::isSubscribed($this->request->email))
        {

            Newsletter::subscribe($this->request->email, [

                config('newsletter.list_fields.firstname') => $this->request->firstname,
                config('newsletter.list_fields.lastname') => $this->request->lastname

            ]);
        }
    }

回答1:


Request is not serializable there is a workaround what you are trying to achieve

 public function store(StoreNewsletterRequest $request)
{
    StoreNewsletterJob::dispatch($request->all());

    return view('backend.dashboard.index');
}

Your job handler.

 public function handle()
{
    if(!Newsletter::isSubscribed($this->request['email']))
    {

        Newsletter::subscribe($this->request['email'], [

            config('newsletter.list_fields.firstname') => $this->request->firstname,
            config('newsletter.list_fields.lastname') => $this->request->lastname

        ]);
    }
}

Hope this helps




回答2:


I followed another approach, Just to may help you out!

Controller

  $newsletter = (object) array(

                'email' => $request->email,
                'firstname' => $request->firstname,
                'lastname' => $request->lastname,

            );

   StoreNewsletterJob::dispatch($newsletter);

Job

protected $newsletter;

    public function __construct( object $newsletter)
    {
        $this->newsletter = $newsletter;
    }

    /**
     * Execute the job.
     *
     * @return void
     */

    public function handle()
    {

        if(!Newsletter::isSubscribed($this->newsletter->email))
        {
            Newsletter::subscribe($this->newsletter->email, [

                config('newsletter.list_fields.firstname') => $this->newsletter->firstname,
                config('newsletter.list_fields.lastname') => $this->newsletter->lastname

            ]);
        }
    }


来源:https://stackoverflow.com/questions/49157861/laravel-jobs-serialization-of-closure-is-not-allowed

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!