Intereting Posts
Извлечь содержимое папки с помощью ZipArchive Почему я не могу передавать пользовательские сеансы между субдоменами? JQuery: переключать изображения Веб-сайт Apple нажимает: проверка подписи пакета push не удалась, но сертификаты Apple одобрены PHP socket_write работает в первый раз, но Есть ли функция, чтобы сделать копию массива PHP другой? Месяцы не отображаются корректно с помощью php Поиск текущего номера страницы в WordPress Как вывести значения этого массива? Как изменить путь загрузки по умолчанию для загрузки файла jquery Как добавить динамический выпадающий список столбцов в регистрации Laravel 5.3? Как хранить и извлекать пользовательские переменные сеанса в Drupal 6? PHP – перенаправление и отправка данных через POST "Phpinfo (): Нельзя полагаться на настройки часового пояса системы …" Запись файла .htaccess с php для обновления AJAX с помощью URL-адресов

Переменное количество опций для компонента symfony / console

Как настроить symfony/console для принятия динамического списка параметров?

Тем не менее – имена параметров не известны на этапе разработки, поэтому мне нужно приложение, чтобы принять все и разоблачить его, используя стандартный метод $input->getOption .

Любой шанс можно сделать легко (без взлома компонента в миллионах мест)?

Мои попытки включали расширение классов ArgvInput и InputDefinition но они не удались из-за разных причин (они объективны и специфичны для реализации symfony/console ). Вкратце: первый требует, чтобы разбор вызывался несколько раз; последний – создается в нескольких местах, поэтому я просто не мог найти подходящий способ его ввода.

Solutions Collecting From Web of "Переменное количество опций для компонента symfony / console"

Вы можете создать свой собственный ArgvInput, который позволит использовать все параметры.

Например, вы можете увидеть немного измененную версию ArgvInput здесь

У меня только измененные строки: 178

И закомментируйте строки: 188-199

Затем передайте экземпляр вашей версии ArgvInput вместо значения по умолчанию для

 $input = new AcceptAllArgvInput(); $kernel = new AppKernel($env, $debug); $application = new Application($kernel); $application->run($input); 

Я делал это раньше, используя опцию IS_ARRAY. Не будет ли это работать и для вашего экземпляра?

 ->addArgument('routeParams', InputArgument::IS_ARRAY, "Required Placeholders for route"); 

Моим вариантом использования был специальный генератор URL для специальной системы проверки подлинности. Мне нужен способ генерации URL-адресов для тестирования. Естественно, каждый маршрут имеет различное количество требуемых параметров, и я хотел избежать передачи параметров в виде строки CSV.

Примеры команд: Использование: myGenerateToken пользовательский маршрут [variables1] … [variablesN]

  php app/console myGenerateToken 1 productHomePage php app/console myGenerateToken 1 getProduct 1 php app/console myGenerateToken 1 getProductFile 1 changelog 

Переменные были переданы команде «routeParams» в виде массива

  $params = $input->getArgument('routeParams'); var_dump($params); array(2) { [0] => string(1) "1" [1] => string(9) "changelog" } 

Я заметил, что есть также версия «Option» с именем InputOption::VALUE_IS_ARRAY , но у меня не было успеха, чтобы она работала. Версия аргумента InputArgument::IS_ARRAY кажется, ведет себя как опция в любом случае, так как она не является ошибкой, если аргументы не указаны.

РЕДАКТИРОВАТЬ:

На вопрос автора задается вопрос «Как определить параметры командной строки переменной во время выполнения», где мой ответ: «Как вы предоставляете несколько значений для заранее заданного параметра / аргумента»,

Вот как это реализовать на PHP 7+ с помощью symfony / console ^ 3.0:

 abstract class CommandWithDynamicOptions extends Command { /** @var array The list of dynamic options passed to the command */ protected $dynamicOptions = []; /** * @inheritdoc */ protected function configure() { $this->setName('custom:command'); $this->setDefinition(new class($this->getDefinition(), $this->dynamicOptions) extends InputDefinition { protected $dynamicOptions = []; public function __construct(InputDefinition $definition, array &$dynamicOptions) { parent::__construct(); $this->setArguments($definition->getArguments()); $this->setOptions($definition->getOptions()); $this->dynamicOptions =& $dynamicOptions; } public function getOption($name) { if (!parent::hasOption($name)) { $this->addOption(new InputOption($name, null, InputOption::VALUE_OPTIONAL)); $this->dynamicOptions[] = $name; } return parent::getOption($name); } public function hasOption($name) { return TRUE; } }); } } как abstract class CommandWithDynamicOptions extends Command { /** @var array The list of dynamic options passed to the command */ protected $dynamicOptions = []; /** * @inheritdoc */ protected function configure() { $this->setName('custom:command'); $this->setDefinition(new class($this->getDefinition(), $this->dynamicOptions) extends InputDefinition { protected $dynamicOptions = []; public function __construct(InputDefinition $definition, array &$dynamicOptions) { parent::__construct(); $this->setArguments($definition->getArguments()); $this->setOptions($definition->getOptions()); $this->dynamicOptions =& $dynamicOptions; } public function getOption($name) { if (!parent::hasOption($name)) { $this->addOption(new InputOption($name, null, InputOption::VALUE_OPTIONAL)); $this->dynamicOptions[] = $name; } return parent::getOption($name); } public function hasOption($name) { return TRUE; } }); } } как abstract class CommandWithDynamicOptions extends Command { /** @var array The list of dynamic options passed to the command */ protected $dynamicOptions = []; /** * @inheritdoc */ protected function configure() { $this->setName('custom:command'); $this->setDefinition(new class($this->getDefinition(), $this->dynamicOptions) extends InputDefinition { protected $dynamicOptions = []; public function __construct(InputDefinition $definition, array &$dynamicOptions) { parent::__construct(); $this->setArguments($definition->getArguments()); $this->setOptions($definition->getOptions()); $this->dynamicOptions =& $dynamicOptions; } public function getOption($name) { if (!parent::hasOption($name)) { $this->addOption(new InputOption($name, null, InputOption::VALUE_OPTIONAL)); $this->dynamicOptions[] = $name; } return parent::getOption($name); } public function hasOption($name) { return TRUE; } }); } }