

Laravelの6.x以降で Illuminate\Queue\Console\WorkCommand のコンストラクタで第二引数が増えていました。

6.xより前

[code]

    /**
     * Create a new queue work command.
     *
     * @param  \Illuminate\Queue\Worker  $worker
     * @return void
     */
    public function __construct(Worker $worker)
    {
        parent::__construct();
    
        $this->worker = $worker;
    }
    
[/code]

6.x以降

[code]

    /**
     * Create a new queue work command.
     *
     * @param  \Illuminate\Queue\Worker  $worker
     * @param  \Illuminate\Contracts\Cache\Repository  $cache
     * @return void
     */
    public function __construct(Worker $worker, Cache $cache)
    {
        parent::__construct();
    
        $this->cache = $cache;
    
        $this->worker = $worker;
    }
    
[/code]

6.xより前のソースを見ると、以前は内部でキャッシュを指定していたようで、これを外部から設定するようになったようです。

[code]

    protected function runWorker($connection, $queue)
    {
        $this->worker->setCache($this->laravel['cache']->driver());
    
        return $this->worker->{$this->option('once') ? 'runNextJob' : 'daemon'}(
            $connection, $queue, $this->gatherWorkerOptions()
        );
    }
    
[/code]

このキャッシュをコンストラクタの第二引数として設定したいのですが、どこから該当するキャッシュを取得できるでしょうか？


CC BY-SA 4.0
2021-02-26T06:23:48.840
74283
2021-02-26T12:27:50.430
43973
question
laravel
Laravel6.x以降のWorkCommandコンストラクタで第二引数に設定するキャッシュの場所が分からない


`app('cache.store')` で取得できるのではないかと思います。

`Illuminate\Foundation\Providers\ArtisanServiceProvider` クラスの
`registerQueueWorkCommand` メソッドでは、以下のように指定されているためです。

[code]

    use Illuminate\Queue\Console\WorkCommand as QueueWorkCommand;
    
        // 中略
    
        $this->app->singleton('command.queue.work', function ($app) {
            return new QueueWorkCommand($app['queue.worker'], $app['cache.store']);
        });
    
[/code]


CC BY-SA 4.0
2021-02-26T12:27:50.430
74291
2021-02-26T12:27:50.430
44069
74283
answer