我的module.config.php
文件中有这样的路线:
'console' => array(
'router' => array(
'routes' => array(
'updatecron' => array(
'options' => array(
'route' => 'cronupdate',
'defaults' => array(
'controller' => 'Application\Controller\Cron',
'action' => 'update'
)
)
)
)
)
)
现在我需要将动态值传递给此操作,就像我们使用正常路线一样使用下面的约束:
'route' => 'cronupdate[/:id][/]',
'constraints' => array(
'id' => '[0-9]+',
),
但是它没有工作并且抛出错误。谷歌搜索时我在ZF2 github issues找到了一个像这样的地方:
'console' => array(
'router' => array(
'routes' => array(
'updatecron' => array(
'options' => array(
'route' => 'cronupdate <id>',
'constraints' => array(
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Application\Controller\Cron',
'action' => 'update'
)
)
)
)
)
)
但它也没有用。请建议我该如何实现。
注意: - 我需要通过exec函数调用它,这就是使用控制台路由的原因。
答案 0 :(得分:0)
我的评论中的路线ID错了。你为控制台路线做了正确的事情!
我想说问题可能在于控制台路由不支持constraints
。我至少找不到任何相关的文档,here in the console rout docs他们也没有提到为控制台路由添加约束......
我也从未见过任何将约束添加到控制台路由的用户案例。不知道为什么呢?也许在官方ZF2存储库中询问GitHub和/或发出功能请求会很有趣。
答案 1 :(得分:0)
从2.0开始,约束适用于Zend\Console
或Laminas\Console
。
我刚刚遇到了同样的问题,并且发现HTTP的Segment路由的工作原理有所不同。对于只能包含数字的ID,您必须输入:
^\d+$
用于HTTP路由#^\d+$#
用于控制台路由 Laminas\Console\RouteMatcher\DefaultRouteMatcher
不会在正则表达式中添加定界符。
注意:您应该了解Laminas\Console
/ Zend\Console
已过时,而应该使用symfony/console
。