将对象传递给任务调度程序

时间:2016-05-16 21:57:22

标签: laravel laravel-5.2

我正在使用Laravel 5.2' task scheduler。我需要能够将两个选项传递给调度程序,但我不确定如何执行此操作。

以下是我Kernel.php中的内容:

protected function schedule(Schedule $schedule)
{
    $schedule->command('simple_cron --first_option=10')
        ->everyMinute();
}

这是我的simple_cron命令:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

use App\Models\Article;

class SimpleCron extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'simple_cron';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '';

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $firstOption = $this->option('first_option');
    }
}

但这给了我错误:

The "--first_option" option does not exist.

我做错了什么?

1 个答案:

答案 0 :(得分:0)

根据offical documentation,第一件事是您的签名需要有一个/两个占位符用于参数:

protected $signature = 'simple_cron {p1} {p2} {--firstoption=5}';

我们在此处为选项5设置了默认值firstoption。如果您不想要默认值,请写下{--firstoption=}

要在handle方法中获取这些参数,您可以这样做:

/**
 * Execute the console command.
 *
 * @return mixed
 */
public function handle()
{
    $p1 = $this->argument('p1'); // should be 10
    $p2 = $this->argument('p2'); // should be 20
    $option1 = $this->option('firstoption'); // should be 99

    //
}

然后您应该可以这样调用它:

$schedule->command('simple_cron 10 20 --firstoption=99')->daily();