Как создать строку URL на основе именованного маршрута и сохранить параметры

Мне нужно создать URL-адреса для переключения категорий, переключение категории должно сбросить страницу до 1-го и изменить имя кошки, но сохранить остальные параметры URL-адреса.

Пример URL:

http://example.com/cat/fruits/page/3/q/testquery/s/date/t/kcal/mine/26/maxe/844/minb/9/mint/4/maxt/93/minw/7/minbl/6/maxbl/96

URL-адреса могут содержать много разных параметров, но имя категории и страница всегда должны быть первыми, категория без страницы тоже должна работать и показывать 1-ю страницу.

В настоящее время я определил два маршрута, и я использую помощник URL-адресов Zend с именованным маршрутом, но он сбрасывает параметры, и в конце концов у меня есть URL-адрес / cat / cat_name / page / 1.

$category_url = $view->url(array('category'=>$list_item['url'],'page'=>1),'category',FALSE)


resources.router.routes.category_main.route = "/cat/:category/*"
resources.router.routes.category_main.defaults.module = "ilewazy"
resources.router.routes.category_main.defaults.controller = "index"
resources.router.routes.category_main.defaults.action = "results"
resources.router.routes.category_main.defaults.category = 
resources.router.routes.category_main.defaults.page = 1

resources.router.routes.category.route = "/cat/:category/page/:page/*"
resources.router.routes.category.defaults.module = "ilewazy"
resources.router.routes.category.defaults.controller = "index"
resources.router.routes.category.defaults.action = "results"
resources.router.routes.category.defaults.category = 
resources.router.routes.category.defaults.page = 1

Нужно ли мне в этом случае создавать собственный метод для сборки url-адреса?


person stawek    schedule 18.09.2012    source источник
comment
мигает что это за чертов URL   -  person wesside    schedule 19.09.2012
comment
Ничего особенного, просто URL для функции поиска и сортировки, понятия не имею, почему все это мигает (:   -  person stawek    schedule 15.01.2013


Ответы (2)


Что бы я попробовал:

  1. Добавьте параметры модуля, контроллера и действия в $ urlOptions (это первый массив, который вы передаете помощнику представления)
  2. вместо имени маршрута 'category' попробуйте null и посмотрите, что это для вас сделает.
  3. Попробуйте удалить эту строку "resources.router.routes.category.defaults.category ="

Пожалуйста, укажите, какую версию zf вы используете.

person Perfection    schedule 19.09.2012

Решение очень простое, нужно просто передать все текущие параметры запроса вспомогательному URL-адресу (и, возможно, перезаписать / добавить некоторые из них, страницу и категорию в моем случае), последняя переменная имеет значение FALSE, чтобы предотвратить сброс маршрута.

$view->url(
        array_merge(
                $params,
                array('category' => $list_item['url'],
                'page' => 1)
                ),
                'category_main', 
             FALSE
            );
person stawek    schedule 15.01.2013