2014-01-16 146 views
2

无限PARAMS我有这样的路线:ZF2控制台路线

'cronExec' => array(
    'options' => array(
     'route' => 'exec [<commands>]', 
     'defaults' => array(
      'controller' => 'Cron\Controller\Commands', 
      'action' => 'exec' 
     ) 
    ) 
), 

这将赶上:

  • execCmd
  • execCmd commandNameHere

,但我也想赶上第二个与无限像参数的数量:

  • execCmd commandNameHere --x = Y --a = B --c = 1
  • execCmd commandNameHere --param1 = 1 --param2 = 0

或以任何其他方式让我送无限的,未知的命名PARAMS到指定的命令,但onlywhen execCmd设置前

回答

2
'cronExec' => array(
    'type' => 'Catchall', 
    'options' => array(
     'route' => 'exec', 
     'defaults' => array(
      'controller' => 'Cron\Controller\Commands', 
      'action' => 'exec' 
     ) 
    ) 
), 

UPDATE1

或者您可以传递单参数内的任何参数。

'cronExec' => array(
    'options' => array(
     'route' => 'exec [--params=]', 
     'defaults' => array(
      'controller' => 'Cron\Controller\Commands', 
      'action' => 'exec' 
     ) 
    ) 
), 

这样称呼它

php public/index.php exec --params="--any --other --params" 

,并在控制器解析$this->params('params')getopt或什么的。

+0

这不起作用。 Catchall似乎忽略了路线。这意味着即使你没有设置'exec',它也会捕获你输入控制台请求的任何东西。两者都会被你的路由所捕获:'exec commandName param1 = a'和'commandName param1 = a'。我只需要第一个选项。 – imclickingmaniac

+1

确保你首先在'['console'] ['router'] ['routes']'数组中放置这条规则。这种方式只有在其他方面没有的情况下才会匹配。 – akond

+0

但是,如果我输入了错误的/不存在的命令,我想离开默认的zend操作。我可以这样做,但如果我会犯一个错误或想看到可用命令列表(对我来说它包括教义),它会跳到我的'exec'控制器中,它不打算对这些事情做出反应。 – imclickingmaniac