ZF: Пользовательский маршрут, сделать все части как параметры - PullRequest
1 голос
/ 07 сентября 2010

Надеюсь, кто-нибудь может мне помочь.

У меня есть 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-адреса, подобные этому.цвет или раздел (справа, слева, оба)

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

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

Если я просто использую$this-_request->getParams(); Я получаю массив, подобный этому

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

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

Любые идеиочень ценится:)

1 Ответ

1 голос
/ 07 сентября 2010

Ну, вот как я думаю, я мог бы сделать это - любые другие решения все еще приветствуются!

$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"
}
...