2013-01-18 60 views
5

我創建了方法的任務類需要多個參數:如何在命令行上運行Laravel Tasks時傳遞多個參數?

class Sample_Task 
{ 
    public function create($arg1, $arg2) { 
     // something here 
    } 
} 

但似乎工匠只得到第一個參數:

php artisan sample:create arg1 arg2 

錯誤消息:

Warning: Missing argument 2 for Sample_Task::create() 

如何在這個方法中傳遞多個參數?

回答

6
class Sample_Task 
{ 
    public function create($args) { 
     $arg1 = $args[0]; 
     $arg2 = $args[1]; 
     // something here 
    } 
} 
+0

非常感謝! – did1k

1

Laravel 5.2

你需要做的就是指定在$signature屬性作爲陣列參數(或選項,例如--option)。 Laravel用星號表示。

參數

例如假設你有一個工匠命令 「過程」 的圖像:

protected $signature = 'image:process {id*}'; 

如果你再這樣做:

php artisan help image:process 

... Laravel將添加正確的Unix風格語法的護理:

Usage: 
    image:process <id> (<id>)... 

要訪問該列表,請在handle()方法中,簡單使用:

$arguments = $this->argument('id'); 

foreach($arguments as $arg) { 
    ... 
} 

選項

我說工作了選項也一樣,你在$signature使用{--id=*}代替。

幫助文本將顯示:

Usage: 
    image:process [options] 

Options: 
     --id[=ID]   (multiple values allowed) 
    -h, --help   Display this help message 

    ... 

因此,用戶需要輸入:

php artisan image:process --id=1 --id=2 --id=3 

並訪問handle()的數據,你會使用:

$ids = $this->option('id'); 

如果您省略'id',您將獲得全部選項,包括對於「安靜」,「詳細」等

$options = $this->option(); 

布爾值,您可以訪問在Laravel Artisan guide$options['id']

更多信息ID列表。