php - Laravel 作业 - 作业失败后从 failed() 方法访问修改后的属性值
问题描述
作业失败后,有没有办法在 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 []
}
}
解决方案
我遇到了同样的问题,没有找到本地解决方案。因此,我通过创建用于缓存数据的服务来解决此问题:
<?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
包含正在运行的作业,而不是序列化构造的作业
推荐阅读
- javascript - 如何在javascript中计算y时间内的x事件数?
- amazon-web-services - 403 在使用 apache 和 mod_wsgi 的 AWS ec2 实例中被禁止
- c# - 在 C# 中返回与自身具有相同签名的函数
- java - JavaFX 应用程序:打印机无法打印文件
- swift - 从 Swift 中的 Set<>.index 获取位置为 int
- java - Linux 僵尸进程未使用 Java ProcessBuilder 终止
- javascript - 在反应应用程序中包含和使用 javascript 文件
- apache-spark - spark如何管理物理内存、虚拟内存和执行器内存?
- intellij-idea - Grails删除方法
- javascript - 我怎么能避免所见即所得的按钮来点击链接