gpt4 book ai didi

php - Laravel 作业 - 在作业失败后从 failed() 方法访问修改后的属性值

转载 作者:行者123 更新时间:2023-12-01 05:53:36 25 4
gpt4 key购买 nike

作业失败后,有没有办法在 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 []
}
}

最佳答案

我遇到了同样的问题,但没有找到 native 解决方案。所以我通过创建一个用于缓存数据的服务来解决:

<?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()我的工作类(class)的方法我做了以下事情:
    /**
* @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包含正在运行的作业,而不是序列化构造的作业

关于php - Laravel 作业 - 在作业失败后从 failed() 方法访问修改后的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51479143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com