Laravel Cronjob запустить то, что внутри метода - PullRequest
0 голосов
/ 04 сентября 2018

В моем контроллере у меня есть эти методы, где он проверяет статус URL

public function index(){
    $url = Url::latest()->paginate();
    return UrlsResource::collection($url);
}

my UrlsResource вернуть данные, как это

public function toArray($request)
{
    return [
        'id' => $this->id,
        'url' => $this->url,
        'status' => $this->status,
        'created_at' => Carbon::parse($this->created_at)->format('Y-m-d'),
     ];
}

где в $this->status указан аксессор от моей модели.

public function getStatusAttribute(){ 
    $handle = curl_init($this->url);
    curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);
    $response = curl_exec($handle);
    $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
    curl_close($handle);
    $message = [
        '100' => '(100) Continue '. $this->url, 
        '101' => '(101) Switching Protocols '. $this->url, 
        '102' => '(102) Processing '. $this->url, 
     ];
    return $message[$httpCode];
}

Как мне запустить cronjob, где я хочу запустить то, что находится внутри моего метода индекса?

Я попытался сделать команду, где в

class CheckUrl extends Command
{
protected $signature = 'check:url';
protected $description = 'Check url';

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        $url = Url::latest()->paginate();
        UrlsResource::collection($url);
    }
}

и я попытался запустить его через командную строку

php artisan check:url

но ничего не произошло

в документации сказано, что добавить эту запись cron на сервер

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

но я точно не знаю, где его поставить (я использую xampp)

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

вы можете вызвать любой метод из вашего контроллера в планировщик, как это

$schedule->call('App\Http\Controllers\yourController@index')->everyMinute()

но вам нужно добавить команду планировщика в corntab, чтобы задачу можно было выполнить.

запуск в терминале

crontab -e

и после этой команды

 * * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
0 голосов
/ 04 сентября 2018

Вы можете просто передать метод controller @ в виде строки для вызова ().

$schedule->call('App\Http\Controllers\MyController@MyAction')->everyMinute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...