我的命令如何将可选参数传递给另一个 Artisan 命令?

How can my command pass through optional arguments to another Artisan command?

(更新问题以表明它与链接的问题不同)

我写了一个 Laravel 命令(完整显示在下面),它基本上是 Dusk 的包装器,这样我就可以确保事先调用某些其他函数。 (否则我难免会忘记重置我的测试环境。)

当我 运行 php artisan mydusk.

时效果很好
namespace App\Console\Commands;

class DuskCommand extends BaseCommand {

    protected $signature = 'mydusk {file?} {--filter=?}';
    protected $description = 'refreshAndSeedTestingDb, then run Dusk suite of tests';

    public function handle() {
        $this->consoleOutput($this->description);
        $resetTestingEnv = new ResetTestingEnv();
        $resetTestingEnv->refreshAndSeedTestingDb();
        $this->consoleOutput('refreshAndSeedTestingDb finished. Now will run Dusk...');
        $file = $this->argument('file');//What to do with this?
        return \Artisan::call('dusk', ['--filter' => $this->option('filter')]);
    }

}

如您所见,我已经阅读了 these docs 并了解如何编写 $signature 来接受可选参数。

我的目标是有时 运行 php artisan mydusk 并且还能够有选择地添加参数,例如当我可能想调用 php artisan mydusk tests/Browser/MailcheckTest.php --filter testBasicValidCaseButtonClick 之类的东西时(这将通过tests/Browser/MailcheckTest.php --filter testBasicValidCaseButtonClick 参数到正常的 dusk 命令)。

如何编辑我的 handle() 函数的最后两行,以便 $file 传递给 dusk

您也可以看看这些链接,它们可能会对您有所帮助。

Stack Answer 1

Stack Answer 2

我很惊讶地从我的实验中得知我原来的功能确实如我所愿地工作,我可以删除惰性线($file = $this->argument('file');)。

通过 \Artisan::call() 传递 file 参数实际上似乎根本没有必要。

@fubar 的回答似乎和我原来的假设一样错误。

正如@Jonas Staudenmeir 在评论中暗示的那样,Laravel\Dusk\Console\DuskCommand 使用来自 $_SERVER['argv'] 的参数。