2010-09-07 4 views
1

Надеюсь, кто-то может помочь мне здесь.ZF: Пользовательский маршрут, сделайте все части как param

У меня есть Zend Router, который обрабатывает добавление материала в корзину. Теперь я создаю модуль customiser, поэтому пользователь может добавлять столько же деталей в разных цветах по определенным разделам продукта.

Мой базовый URL, как это

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 

Что я действительно хотел бы acommodate являются URLs, как это.

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

Основном все позади размера/типа/является частью, цвета или раздел (справа, слева, оба)

Как я могу получить один массив всех URL-путь-части после размер/тип?

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

Если я просто использовать $this-_request->getParams(); я получаю массив как этот

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

я мог бы запустить через этот массив, добавляя все ключи и значения как значения в новом массиве. Проблема в том, что если число частей пути url нечетно, последняя часть не будет возвращена параметрам, поскольку она рассматривается как пустая переменная, поэтому не добавляется в массив params.

Любые идеи гораздо apreciated :)

ответ

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" 
} 
+0

Я использую это сейчас, это здорово :) – Phliplip