Откройте файл app\Console\Kernel.php
, который входит в стандартную комплектацию laravel. Он расширяет Illuminate\Foundation\Console\Kernel
.
Теперь вы можете переписать конструктор следующим кодом:
// Define a property where the keys are the command name, and the values
// are arrays with the options that you are allowed to pass.
protected $optionFilters = [
'my-command-name' => [
'user',
'raw',
]
];
public function __construct(Application $app, Dispatcher $events)
{
parent::__construct($app, $events);
$commands = $this->getArtisan()->all();
foreach ($commands as $command) {
// Now we simply loop all registered commands, and see if we should
// apply a filter.
if ($filter = array_get($this->optionFilters, $command->getName())) {
$options = array_filter(
$command->getDefinition()->getOptions(),
function (\Symfony\Component\Console\Input\InputOption$option) use ($filter) {
return in_array($option->getName(), $filter);
});
// Set the new options to the command.
$command->getDefinition()->setOptions($options);
}
}
}
Теперь, если вы ранее определили такую команду, как:
protected $signature = 'my-command-name {--user} {--raw} {--type}';
Выполнение вышеупомянутого l oop исключило бы {--type}
из команды.
Я заметил некоторые побочные эффекты, хотя при удалении опций из собственных ремесленных команд Laravel (например, php artisan help
команда, которая выдавала некоторые ошибки при удалении опции --format
). Поэтому вам придется проверить кое-что из этого.
Также есть getArguments()
и setArguments()
, которые можно использовать для пропуска аргументов, таких как {user?}
или {user=foo}
(параметры запускаются с --
в определении команды, аргументы нет).