Php Laravel-将请求传递到队列作业

Php Laravel-将请求传递到队列作业,php,laravel,Php,Laravel,我无法传递队列处理作业的请求 实际上,$request是空的。如果我删除请求并只保留handle$Request,我将获得以下堆栈: 函数App\Jobs\PostAlfred::handle的参数太少,传递了0个参数,实际需要1个参数 当表单更新时,我从控制器调用此函数 public function update(UpdateRequest $request)

我无法传递队列处理作业的请求

实际上,$request是空的。如果我删除请求并只保留handle$Request,我将获得以下堆栈:

函数App\Jobs\PostAlfred::handle的参数太少,传递了0个参数,实际需要1个参数

当表单更新时,我从控制器调用此函数

 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