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
因此,您还必须直接在控制器中验证参数。与您建议的没有多大区别,但您可以使用位置值参数作为最终参数,并在空间上分解。