ZF:自定义路线,将所有部分都作为参数

时间:2010-09-07 10:45:08

标签: zend-framework zend-route zend-controller-router

希望有人可以帮助我。

我有一个Zend路由器可以处理添加到篮子里的东西。现在我正在构建一个定制器模块,因此用户可以在产品的指定部分添加不同颜色的部件。

我的基本网址是这样的

http://www.domain.com/shop/add/custom/size/type

我当前的router.ini就像这样

resources.router.routes.shopAddCustom.route = shop/add/custom/:size/:type/*
resources.router.routes.shopAddCustom.defaults.module = shop
resources.router.routes.shopAddCustom.defaults.controller = order
resources.router.routes.shopAddCustom.defaults.action = add
resources.router.routes.shopAddCustom.defaults.product = builder

我真正想要的是这样的网址。

http://www.domain.com/shop/add/custom/size/type/part3/blue/right/part2/part6/both/part7/red/part1/left/orange/

基本上,尺寸/类型/背后的一切都是零件,颜色或部分(右,左,两者)

如何在尺寸/类型之后获得所有url-path-parts的单个数组?

array(0 => 'part3', 1 => 'blue', 2 => 'right', 3 => 'part2', 4 => 'part6' [...] );

如果我只是使用$this-_request->getParams();,我会得到一个像这样的数组

array('part3' => 'blue', 'right' => 'part2', 'part6' => 'both' [...] );

我可以遍历该数组,将所有键和值作为值添加到新数组中。问题是,如果url-path-parts的数量是奇数,则最后一部分将不会返回到params,因为它被视为空变量,因此不会添加到params数组中。

任何想法都是非常偏见的:)

1 个答案:

答案 0 :(得分:1)

嗯,这就是我认为我可以做到这一点 - 任何其他解决方案仍然受欢迎!

$size = $this->_getParam('size');
$type = $this->_getParam('type');

$baseRouterUrl = $this->_helper->url->url(array('size' => $size, 'type' => $type), 'shopAddCustom', true);
$pathInfo = dirname($this->_request->getPathInfo() . '/.');

$pathInfo = str_replace($baseRouterUrl, '', '/' . $pathInfo);
$pathInfo = trim($pathInfo, '/\\');

$pathArr = explode('/', $pathInfo);

这是结果数组。

array(11) {
  [0]=>
  string(5) "part3"
  [1]=>
  string(4) "blue"
  [2]=>
  string(5) "right"
  [3]=>
  string(5) "part2"
  [4]=>
  string(5) "part6"
  [5]=>
  string(4) "both"
  [6]=>
  string(5) "part7"
  [7]=>
  string(3) "red"
  [8]=>
  string(5) "part1"
  [9]=>
  string(4) "left"
  [10]=>
  string(6) "orange"
}