如何将Zend Framework的路由模式更改为不使用键/值对?

时间:2009-10-09 21:55:57

标签: php zend-framework

我不想使用controller/action/key1/value1/key2/value2作为我的网址,而是使用controller/action/value1/value2。我想我可以通过在我的Bootstrap类中定义自定义路由来实现这一点,但我希望我的整个应用程序都以这种方式运行,因此为每个操作添加自定义路由是不可能的。

这可能吗?如果是这样,我将如何访问valueN?我希望能够在我的action方法的签名中定义参数。 e.x:

 // PostsController.php

 public function view($postID) {
      echo 'post ID: ' . $postID;
 }

我正在使用Zend Framework 1.9.3

谢谢!

2 个答案:

答案 0 :(得分:2)

虽然我认为当前路由器不允许N值(固定数量可以工作),但您可以编写一个自定义路由器来为您完成。

然而,我会质疑这种方法,并建议实际列出所有路线不会花费太长时间,从长远来看会更容易。按照您的建议设计的路线意味着您的命名参数始终处于相同的顺序,即

/controller/action/id/title/colour

或者他们几乎是匿名的

/controller/action/value1/value2/value3

使用类似

的代码
$this->getRequest()->getParam('value2'); //fairly meaningless

答案 1 :(得分:1)

它必须是N还是你能说一些有限的价值?比如你能想象你永远不需要超过5个参数吗?如果是这样,您可以设置路线:

 /:controller/:action/:param0/:param1/:param2/:param3/:param4

即使您没有为每个操作指定所有5个参数,这也会有效。如果您在其他地方需要6,则可以在路线上添加另一个/:paramN。

我之前使用的另一个解决方案是编写一个插件来解析REQUEST_URI并将所有额外的参数放在dispatchLoopStartup()方法的请求对象中。我更喜欢第一种方法,因为它使得params来自哪里更加明显。