【问题标题】:Access Laravel Queued Job's payload data访问 Laravel Queued Job 的有效负载数据
【发布时间】:2017-05-04 13:59:36
【问题描述】:

如何从 Laravel 作业类中访问有效负载?

我试过了:

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

use App\PDF;

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

    protected $pdf;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(PDF $pdf)
    {
        $this->pdf = $pdf;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {

        $payload = $this->payload(); //undefined method
        $payload = $this->payload; //undefined property
        $payload = json_decode($this->getRawBody(), true); //undefined method

        ....

我从 Job 课程中得到这些。但是payload()getRawBody() 都返回Call to undefined method

其他方法from that class do work - 例如$this-&gt;release(1),所以我不确定$this 是否指的是实际的作业类。

我正在使用 Redis 队列驱动程序,使用 Laravel 5.4。

【问题讨论】:

  • 您希望从payload() 方法中得到什么?通常,您会通过构造函数传递作业所需的数据,就像您对 PDF 类所做的那样。

标签: php laravel laravel-5


【解决方案1】:

之所以能够调用$this-&gt;release() 方法是因为这是一个通过特征InteractsWithQueue (https://github.com/laravel/framework/blob/5.4/src/Illuminate/Queue/InteractsWithQueue.php#L57) 添加到ProcessConversion 类中的方法

您可以让您的类扩展抽象 Job 类 (https://github.com/laravel/framework/blob/5.4/src/Illuminate/Queue/Jobs/Job.php),可能让您可以访问您希望的那些方法,但是,我无法查找有关此的任何文档。

【讨论】:

  • 有问题的类没有实现Job类的接口,所以这样做是不可能的
【解决方案2】:

您是否尝试改用$payload = $this-&gt;job-&gt;payload()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    相关资源
    最近更新 更多