Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel作业无法识别对象属性_Laravel_Jobs_Laravel Events_Laravel Jobs - Fatal编程技术网

Laravel作业无法识别对象属性

Laravel作业无法识别对象属性,laravel,jobs,laravel-events,laravel-jobs,Laravel,Jobs,Laravel Events,Laravel Jobs,我正在将一个请求传递给一个职业班,以发送一封电子邮件,索取一份联系表。问题是我无法直接访问该属性 我在构造函数中将$request设置为$this->request=$request 在handle()方法中,我执行以下操作: \日志::信息('job contact request',['request'=>$this->request]) 原木吐出: [2018-06-30 14:07:34]local.INFO:request{“request”:“[object](App\Events\

我正在将一个请求传递给一个职业班,以发送一封电子邮件,索取一份联系表。问题是我无法直接访问该属性

我在构造函数中将$request设置为
$this->request=$request

handle()
方法中,我执行以下操作:

\日志::信息('job contact request',['request'=>$this->request])

原木吐出:

[2018-06-30 14:07:34]local.INFO:request{“request”:“[object](App\Events\ContactRequestValidated:{“request\”:{“client\u name\”:“Daniel\”,“client\u email\”:\”email@email.com\“,”客户端电话\“:\”1234567891\“,”客户端文本\“:\”blargle-carble-darble-zarble \“},\”套接字\“:null}”}”

这表明已设置客户端电子邮件。但是当我尝试访问
$this->request->client\u email
时,我得到:

[2018-06-30 14:15:30]local.ERROR:未定义属性:App\Events\ContactRequestValidated::$client_email{“exception”:“[object](ErrorException(代码:0):未定义属性:App\Events\ContactRequestValidated::$client_email at/var/www/site/laravel/App/Jobs/SendContactRequestEmail.php:36) [stacktrace]


在处理Laravel事件/侦听器/作业时,有几件事我必须纠正。在多个类之间建立日志真的让我很反感

在事件构造函数中,我必须在设置请求时使用
all()
方法

$this->request=$request->all()
按属性名正确访问数据

// Event Constructor
public function __construct( ContactRequest $request )
    {
        $this->request = $request->all();
        // \Log::info( 'Event-Constructor', [ 'contact_request' => $this->request ] );
    }
事件将事件构造函数中的数据集作为事件对象的属性传递给侦听器。必须通过事件对象访问数据

// Listener
public function handle( ContactRequestValidated $event )
    {
        // \Log::info( 'listener', [ 'contact-event' => $event->request ] );

        dispatch( new SendContactRequestEmail( $event->request ));
    }
下一部分我不确定为什么会发生这种情况,但在作业中,请求从对象更改为数组

这就是工作代码:

// Job Constructor
public function __construct( $request )
    {
        $this->request = $request; // Actually an array, not an object
    }

// Job handle
public function handle()
    {
        // \Log::info( 'job-contact-request', [ 'request' => $this->request ] );

        $email = new ConfirmContactRequest( $this->request );

        \Log::info( 'job-contact-request', [ 'email_html' => $email ] );

        // Note request has to be accessed by array notation rather than arrow method
        Mail::to( $this->request['client_email'] )->send( $email );
    }

你能分享它的代码吗?@Marcus我在下面的回答中发现了这个问题。这是一个注册的侦听器吗?你的handle方法接收事件作为它的第一个参数。我可能错了,但我认为没有理由使用构造函数。按照我提到的方法似乎是“Laravel方法”