Php Laravel-将请求传递到队列作业
我无法传递队列处理作业的请求 实际上,$request是空的。如果我删除请求并只保留handle$Request,我将获得以下堆栈: 函数App\Jobs\PostAlfred::handle的参数太少,传递了0个参数,实际需要1个参数 当表单更新时,我从控制器调用此函数Php Laravel-将请求传递到队列作业,php,laravel,Php,Laravel,我无法传递队列处理作业的请求 实际上,$request是空的。如果我删除请求并只保留handle$Request,我将获得以下堆栈: 函数App\Jobs\PostAlfred::handle的参数太少,传递了0个参数,实际需要1个参数 当表单更新时,我从控制器调用此函数 public function update(UpdateRequest $request)
public function update(UpdateRequest $request) |▸ vendor/
{ | artisan*
$redirect_location = parent::updateCrud($request); | composer.json* | composer.lock*
PostMyJob::dispatch($request);
我尝试添加UpdateRequest,例如:handleUpdateRequest$请求,然后我得到一个授权错误
不确定如何继续。请记住,请求仅存在于实际HTTP请求的上下文中。它仅在应用程序处理该请求时存在。当队列工作人员开始从队列中删除作业时,没有请求。Laravel无法为您提供该请求的实例,因为没有实例 您需要做的是明确地传递您的工作所需的信息,以便履行其职责。如果您只需要请求的输入,您可以执行类似的操作—这将为作业的构造函数提供一个输入数组 PostMyJob::dispatch$request->all 公共函数\uuuu构造函数数组$input { $this->input=$input; }
您可能已经看到了将雄辩的模型传递到作业中的示例,但不要因此而误以为整个类将按原样提供给处理程序。Laravel足够聪明,可以在处理作业时为您重新获取雄辩的模型,但如前所述,它无法为您获取原始请求。请记住,请求仅存在于实际HTTP请求的上下文中。它仅在应用程序处理该请求时存在。当队列工作人员开始从队列中删除作业时,没有请求。Laravel无法为您提供该请求的实例,因为没有实例 您需要做的是明确地传递您的工作所需的信息,以便履行其职责。如果您只需要请求的输入,您可以执行类似的操作—这将为作业的构造函数提供一个输入数组 PostMyJob::dispatch$request->all 公共函数\uuuu构造函数数组$input { $this->input=$input; } 您可能已经看到了将雄辩的模型传递到作业中的示例,但不要因此而误以为整个类将按原样提供给处理程序。Laravel足够聪明,可以在处理工作时为您重新获取雄辩的模型,但如前所述,它无法为您获取原始请求 当您向dispatch函数传递任何参数时,这些参数将在作业的构造函数中传递,而不是在handle方法中传递 见文件所述 在您的工作中,请执行以下操作:
class SomeJob extends Job{
private $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public function handle()
{
if (strpos($this->request->status, 'Approved') !== false) {
$name = Name::where('mId', '=', $this->request->mId)->get()->first();
$client = new Client();
$client->request('POST', 'http://127.0.0.1:5000/api/email', [
'json' => [
'type' => $this->request->type,
'name' => $name->name,
]
]);
}
}
}
当您向dispatch函数传递任何参数时,这些参数将在作业的构造函数中传递,而不是在handle方法中传递
见文件所述
在您的工作中,请执行以下操作:
class SomeJob extends Job{
private $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public function handle()
{
if (strpos($this->request->status, 'Approved') !== false) {
$name = Name::where('mId', '=', $this->request->mId)->get()->first();
$client = new Client();
$client->request('POST', 'http://127.0.0.1:5000/api/email', [
'json' => [
'type' => $this->request->type,
'name' => $name->name,
]
]);
}
}
}
为什么队列作业需要请求。。?我相信这个错误是由以下事实引起的:作业在正常请求流之外执行。因为这个api调用使系统挂起。我需要异步执行它,而laravel附带了队列,这是异步执行的唯一方法。如果我不这样做,用户在单击“更新”时会挂起一段时间,因为此过程等待api调用完成。我认为您在其他语言上混淆了队列和异步的概念。队列更类似于cronjob。我相信额外的表格将帮助您存储队列所需的信息。队列工作正常。我不需要在那个时刻执行那个代码。我不知道你在说什么,当你说额外的桌子@BagustesawQueue作业为什么需要请求。。?我相信这个错误是由以下事实引起的:作业在正常请求流之外执行。因为这个api调用使系统挂起。我需要异步执行它,而laravel附带了队列,这是异步执行的唯一方法。如果我不这样做,用户在单击“更新”时会挂起一段时间,因为此过程等待api调用完成。我认为您在其他语言上混淆了队列和异步的概念。队列更类似于cronjob。我相信额外的表格将帮助您存储队列所需的信息。队列工作正常。我不需要在那个时刻执行那个代码。我不知道你在说什么,当你说额外的桌子@BagusTesaI以前试过这个。这就是我要做的。。Symfony\Component\Debug\Exception\fatalthrowable错误:函数App\Jobs\PostMyJob::handle的参数太少,传递了0个,正好传递了1个预期值。我以前尝试过此操作。这就是我要做的。。Symfony\Component\Debug\Exception\fatalthrowable错误:函数App\Jobs\PostMyJob::handle的参数太少,传递了0,预期正好是1