Laravel作业无法识别对象属性
我正在将一个请求传递给一个职业班,以发送一封电子邮件,索取一份联系表。问题是我无法直接访问该属性 我在构造函数中将$request设置为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\
$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方法”