加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – Laravel事件侦听器未定义属性错误与ShouldQueue

发布时间:2020-12-14 19:44:25 所属栏目:大数据 来源:网络整理
导读:我的应用程序中有一个事件设置,在用户注册时发送激活电子邮件.没有ShouldQueue接口,它可以完美地工作.但是,当我添加工具ShouldQueue时,我得到未定义的属性错误: Undefined property: AppEventsUserUserCreated::$user 我使用的代码如下: ?phpnamespace
我的应用程序中有一个事件设置,在用户注册时发送激活电子邮件.没有ShouldQueue接口,它可以完美地工作.但是,当我添加工具ShouldQueue时,我得到未定义的属性错误:

Undefined property: AppEventsUserUserCreated::$user

我使用的代码如下:

<?php

namespace AppListenersUser;

use AppEventsUserUserCreated;
use IlluminateQueueInteractsWithQueue;
use IlluminateContractsQueueShouldQueue;
use AppReposEmailEmailTemplateRepoInterface;
use AppReposUserUserRepoInterface;
use Request,Mail,DbView;

class UserCreatedEmail implements ShouldQueue
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct(EmailTemplateRepoInterface $template)
    {
        $this->template = $template;
    }

    /**
     * Handle the event.
     *
     * @param  UserCreated  $event
     * @return void
     */
    public function handle(UserCreated $event)
    {
        $user = $event->user;

        if($user)
        {
            if(!$user->status)
            {
                $user->activation_url = Request::root().'/activate/'.$user->activation_code;
                $template = $this->template->findTemplateByName('new_user_activation');
                $userArr = $user->toArray();
            }

            Mail::queue([],[],function ($message) use ($template,$userArr) 
            {
                $message->to($userArr['email'])
                    ->subject($template->subject)
                    ->setBody(DbView::make($template)->with($userArr)->render(),'text/html');
            });
        }
    }
}

编辑

这也是UserCreated类:

<?php

namespace AppEventsUser;

use AppEventsEvent;
use IlluminateQueueSerializesModels;
use IlluminateContractsBroadcastingShouldBroadcast;

class UserCreated extends Event
{
    use SerializesModels;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($user,$row,$request)
    {
        $this->user = $user;
        $this->request = $request;
        $this->row = $row;
    }

    /**
     * Get the channels the event should be broadcast on.
     *
     * @return array
     */
    public function broadcastOn()
    {
        return [];
    }
}

任何人都可以解释为什么当我尝试排队邮件时会发生这种情况?

解决方法

您需要将属性明确定义为public.即

class UserCreated extends Event
{
    use SerializesModels;
    public $user;

...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读