Есть ли способ создать консольный маршрут ZF2 с параметрами повтора

Я пытаюсь настроить консольный маршрут, который может принимать несколько адресов электронной почты.
В основном то, что я хочу, это маршрут, который принимает что-то вроде:

php public/index.php run-report [email protected] [email protected]

Я пробовал:

run-report [--email=]

Но это будет принимать только один адрес. Как только вы вводите второй —email, он не соответствует маршруту. Я могу взломать его, передав строку адресов электронной почты через запятую, но я ищу способ, который приведет к массиву значений, чтобы мне не пришлось самому анализировать параметр.

2

Решение

Если посмотреть на исходный код простого консольного маршрутизатора (т. Е. Zend \ Mvc \ Router \ Console \ Simple), то не видно, что он доступен «из коробки». Соответствие параметров консоли записывается только для соответствия уникальным ключам в маршруте.

Тем не менее, вместо этого вы можете попробовать использовать тип маршрута «catchall».

Так, например, используйте это как ваш маршрут консоли:

'test'  => array(
'type'    => 'catchall',
'options' => array(
'route'    => 'test',  //this isn't actually necessary
'defaults' => array(
'controller' => 'Console\Controller\Index',
'action'     => 'test'
)
)
)

Затем вы можете передать столько значений —email, сколько хотите, вам просто нужно проверить их в контроллере.

Итак, запустив это:

php index.php test [email protected] [email protected]

Можно интерпретировать в контроллере:

print_r( $this->getRequest()->getParams()->toArray() );

Array
(
[0] => test
[1] => [email protected]
[2] => [email protected]
[controller] => Console\Controller\Index
[action] => test
)

Это не совсем идеально, так как вы также можете получить тот же ввод, выполнив это (т. Е. Передавая электронную почту вместо теста в качестве маршрута) — потому что это ловушка:

php index.php email [email protected] [email protected]

Так что вам придется проверять параметры непосредственно в контроллере.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]