Как моя команда может передать необязательные аргументы другой команде Artisan?
(Обновленный вопрос, чтобы показать, что это не похоже на связанные вопросы)
Я написал команду 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')]);
}
}
Как вы видите, я уже прочитал эти документы и понимаю, как написать $signature
принять необязательные аргументы.
Моя цель - уметь иногда бегать php artisan mydusk
а также иметь возможность добавлять аргументы, например, когда я могу захотеть вызвать что-то вроде php artisan mydusk tests/Browser/MailcheckTest.php --filter testBasicValidCaseButtonClick
(который пройдет tests/Browser/MailcheckTest.php --filter testBasicValidCaseButtonClick
доводы до нормального dusk
команда).
Как я могу редактировать последние 2 строки моего handle()
функционировать так, чтобы $file
передается в dusk
?
4 ответа
Используйте подпись без '-' для предоставления аргументов
return \Artisan::call('dusk', ['file' => $file , '--filter' => $this->option('filter')]);
В документации есть пример, но он не указан четко (предполагается, что вы следовали всем утверждениям в разделах выше)
Для подписи ниже
protected $signature = 'email:send {user} {--queue}';
Это дает (очень далеко ниже) этот пример как вызов команды Artisan из других команд.
public function handle()
{
$this->call('email:send', [
'user' => 1, '--queue' => 'default'
]);
}
https://laravel.com/docs/5.6/artisan#calling-commands-from-other-commands
Я был удивлен, узнав из своих экспериментов, что моя оригинальная функция на самом деле работает, как я хотел, и я могу удалить инертную линию ($file = $this->argument('file');
).
Проходя file
спорить через \Artisan::call()
на самом деле не кажется необходимым вообще.
Ответ @ Фубара, похоже, сделал те же ошибочные предположения, что и я.
Как @Jonas Staudenmeir намекнул в комментарии, Laravel\Dusk\Console\DuskCommand
использует аргументы из $_SERVER['argv']
,
Изначально я неправильно понял ваш вопрос. Однако в документации также есть раздел, в котором описывается, как программно вызывать команду Artisan.
Исходя из вашего вопроса, я предполагаю, что вы не знаете, как пройти file
аргумент, потому что при вызове в качестве команды, нет key
, так сказать.
php artisan mydusk {file?} {--filter=}
Следующая информация взята из документации Laravel. key
для file
Аргумент должен быть именем аргумента. Что касается аргумента, являющегося необязательным, если file
аргумент не указан, когда mydusk
команда называется, тогда null
будет передан в dusk
команда.
public function handle() {
// ...
$file = $this->argument('file');
$filter = $this->option('filter');
return Artisan::call('dusk', [
'file' => $file,
'--filter' => $filter,
]);
}