Laravel 队列中怎么取到 header 内的值

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class TestHeaderJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

  public function __construct()
  {
        //
  }


  public function handle()
  {
        $platform = request()->header('platform');
        \Log::info("header内platform的值:{$platform}");
        dump($platform);
    }
}

laravel 延迟队列中如果取到header内的值

php artisan queue:work redis

我需要在队列中取到header内的值,我尝试直接取,因为不在同一生命周期内,所以取不到。如果在类上传参,如果层级太长,header就必须一路传下去,写的时候就会很头疼,有没有大神遇到过这种问题,是怎么解决的

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

dispatch的时候把Request类的对象传进去,这样在Jobs类的构造函数就能够获取该对象,然后在Jobs类中像这样用:

class SomeJob extends Job{

  private $request;

  public function __construct(Request $request)
  {
    $this->request = $request;
  }

  public function handle()
  {
    // 使用$this->request
  }
}
4年前 评论
讨论数量: 3

代码应该这么写


  protected $platform;

  public function __construct($platform)
  {
        $this->platform = $platform
  }


  public function handle()
  {
        $platform = $this->platform;
        \Log::info("header内platform的值:{$platform}");
        dump($platform);
  }

然后调用队列的地方


TestHeaderJob::dispatch(request()->header('platform'));

你说的层级太长,只要是在laravel里面request()在哪个地方都可以获取headers啊。

4年前 评论

dispatch的时候把Request类的对象传进去,这样在Jobs类的构造函数就能够获取该对象,然后在Jobs类中像这样用:

class SomeJob extends Job{

  private $request;

  public function __construct(Request $request)
  {
    $this->request = $request;
  }

  public function handle()
  {
    // 使用$this->request
  }
}
4年前 评论
刘天承

:joy:

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!