Laravel 作业 - 作业失败后从 failed() 方法访问修改后的属性值
Posted
技术标签:
【中文标题】Laravel 作业 - 作业失败后从 failed() 方法访问修改后的属性值【英文标题】:Laravel jobs - Accessing modified property values from failed() method after job has failed 【发布时间】:2018-12-30 22:13:57 【问题描述】:有没有办法在作业失败后访问 Laravel 作业中修改的属性值?当我dd()
failed()
方法中的缺失项数组在处理作业时将一个项目推入其中后,我得到返回的空数组的初始属性值,而不是包含推入其中的项目的数组。
如果无法做到这一点,是否可以创建自定义异常并接受自定义数据作为参数?然后我可以在我的自定义异常中添加一个getData()
方法并在failed()
中调用它来获取我修改后的属性值。
顺便说一句,我没有粘贴下面的实际工作类,因为它会很大,但这模拟了我希望实现的目标。
我希望我已经解释得足够清楚了。
感谢任何建议。谢谢!
<?php
namespace App\Jobs;
use Exception;
use Illuminate\Bus\Queueable;
use Illuminate\Support\Facades\Mail;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class PushOrdersToAnotherService implements ShouldQueue
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $missingItems = [];
public function handle()
// ...
if (true)
$this->missingItems[] = ['name' => 'Some item'];
throw new Exception('Items were missing', 400);
public function failed(Exception $exception)
dd($this->missingItems); // Returns []
【问题讨论】:
【参考方案1】:我遇到了同样的问题,但没有找到本地解决方案。因此,我通过创建用于缓存数据的服务来解决问题:
<?php
namespace App\Services;
use App\Jobs\Job;
class JobFailService
/**
* @var Job
*/
public $job;
/**
* @var JobFailService
*/
private static $instance;
/**
* @return JobFailService
*/
public static function factory()
if (!self::$instance)
self::$instance = new self();
return self::$instance;
在我的作业类的handle()
方法中,我做了以下操作:
/**
* @return void
*/
public function handle(): void
$jobFailService = JobFailService::factory();
$jobFailService->job = $this;
在failed()
方法中:
/**
* @param Exception $exception
*/
final public function failed(Exception $exception)
$jobFailService = JobFailService::factory();
$jobFailService->job
包含正在运行的作业,而不是序列化构造的作业
【讨论】:
以上是关于Laravel 作业 - 作业失败后从 failed() 方法访问修改后的属性值的主要内容,如果未能解决你的问题,请参考以下文章