如何在 laravel 5.1 中将类的方法作为 cron 任务运行


How to run a method of a class as a cron task in laravel 5.1

>看,我有一个看起来像这样的类,我想每天使用此方法在 cron 作业中缓存一些信息 cacheTopFilters 在 laravel 5.1 中

<?php
namespace namescape/of/the/class;
class FilterTypeCacheService extends BaseService implements IFilterTypeCacheService
{
    private $searchFilterService;
    private $filterCacheHandler;
    function __construct(SearchFilterService $searchFilterService, IFilterTypeCacheHandler $filterCacheHandler){
        $this->searchFilterService = $searchFilterService;
        $this->filterCacheHandler = $filterCacheHandler;
    }
    public function cacheTopFilters($type,$keyValuePair,$limit){
        $filters = $this->searchFilterService->getAllFilters($type,$keyValuePair);
        $this->filterCacheHandler->deleteFiltersBulkFromCache();
        $this->filterCacheHandler->SaveFiltersBulk($filters,$type);
    }
    public function getTopFilters(){
        $topFilters = $this->filterCacheHandler->getCachedTopFilters();
        return $topFilters;
    }
}

由于他们有依赖注入,我如何完成在计划方法上的应用程序/控制台/内核上调用该方法?

你想看看任务调度:

https://laravel.com/docs/5.1/scheduling#defining-schedules

App'Console'Kernel类中,在 schedule 函数中,您可以像这样安排任何内容:

$schedule->call(function () {
    doSomething();
})->daily();

假设您已经设置了调度程序(每分钟进行一次系统 cron 作业),您应该已经全部设置好了。

如果你有一个需要实例化的类,并注入了依赖项,你总是可以使用Laravel给你的全局app()辅助函数:

$schedule->call(function () {
    app('namespace'of'the'class::class)->cacheTopFilters(...);
})->daily();

这是假设Laravel知道如何处理你的依赖关系。我看到您的依赖项之一是合约(接口),因此我假设您已经在Laravel IoC中绑定了具体实例。