我不想使用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
谢谢!
答案 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来自哪里更加明显。