Php 有没有办法用重复参数创建ZF2控制台路由

Php 有没有办法用重复参数创建ZF2控制台路由,php,zend-framework2,console-application,Php,Zend Framework2,Console Application,我正在尝试设置一个控制台路由,可以接受多个电子邮件地址。 基本上,我想要的是一条可以接受以下内容的路线: php public/index.php run-report --email=first@example.com --email=second@example.com 我试过: run-report [--email=] 但这只接受一个地址。一旦你输入第二封电子邮件,它就无法匹配路径。我可以通过传入一个逗号分隔的电子邮件地址字符串来破解它,但我正在寻找一种生成一个值数组的方法,这样我就

我正在尝试设置一个控制台路由,可以接受多个电子邮件地址。 基本上,我想要的是一条可以接受以下内容的路线:

php public/index.php run-report --email=first@example.com --email=second@example.com
我试过:

run-report [--email=]

但这只接受一个地址。一旦你输入第二封电子邮件,它就无法匹配路径。我可以通过传入一个逗号分隔的电子邮件地址字符串来破解它,但我正在寻找一种生成一个值数组的方法,这样我就不必自己解析参数。

通过查看简单控制台路由器(即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'
        )
    )
)
然后,您可以传递任意数量的电子邮件值,您只需在控制器中验证它们

所以运行这个:

php index.php test --email=test@testing.com --email=test2@testing.com
可在控制器中进行解释:

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

Array
(
    [0] => test
    [1] => --email=test@testing.com
    [2] => --email=test2@testing.com
    [controller] => Console\Controller\Index
    [action] => test
)
这并不十分理想,因为您也可以通过执行此操作获得相同的输入(即,作为路由传递电子邮件而不是测试)-因为它是catchall:

php index.php email --email=test@testing.com --email=test2@testing.com

因此,您还必须直接在控制器中验证参数。

与您建议的没有多大区别,但您可以使用位置值参数作为最终参数,并在空间上分解。