在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 []
}
}
答案 0 :(得分:0)
我遇到了同样的问题,但没有找到本机解决方案。因此,我通过创建用于缓存数据的服务来做出解决方法:
<?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
包含正在运行的作业,而不是序列化的构造作业