如何在ZF2中的控制台路由中使用约束..?

时间:2016-04-13 10:10:16

标签: php routing zend-framework2

我的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函数调用它,这就是使用控制台路由的原因。

2 个答案:

答案 0 :(得分:0)

我的评论中的路线ID错了。你为控制台路线做了正确的事情!

我想说问题可能在于控制台路由不支持constraints。我至少找不到任何相关的文档,here in the console rout docs他们也没有提到为控制台路由添加约束......

我也从未见过任何将约束添加到控制台路由的用户案例。不知道为什么呢?也许在官方ZF2存储库中询问GitHub和/或发出功能请求会很有趣。

答案 1 :(得分:0)

从2.0开始,约束适用于Zend\ConsoleLaminas\Console

我刚刚遇到了同样的问题,并且发现HTTP的Segment路由的工作原理有所不同。对于只能包含数字的ID,您必须输入:

  • ^\d+$用于HTTP路由
  • #^\d+$#用于控制台路由

Laminas\Console\RouteMatcher\DefaultRouteMatcher不会在正则表达式中添加定界符。

注意:您应该了解Laminas\Console / Zend\Console已过时,而应该使用symfony/console