ZF: Пользовательский маршрут, сделать все части как параметры
Надеюсь, кто-нибудь может помочь мне здесь.
У меня есть Zend Router, который обрабатывает добавление вещей в корзину. Сейчас я создаю модуль настройщика, чтобы пользователь мог добавить как можно больше деталей разных цветов в определенные разделы продукта.
Мой основной 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
То, что я действительно хотел бы разместить, это URL-адреса, как это.
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-path-parts нечетное, последняя часть не будет возвращена в params, так как она рассматривается как пустая переменная, поэтому не добавляется в массив params.
Любые идеи очень ценятся:)
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"
}