如何根据命名路由创建URL字符串并保留参数

时间:2012-09-18 21:01:54

标签: php zend-framework routes urlhelper

我需要为类别切换创建网址,切换类别应该将页面重置为第1并更改猫名称,但保留其余网址参数。

网址示例:

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

网址可以包含许多不同的参数,但类别名称和页面应该始终是第一个,没有网页的类别也应该有效并显示第一页。

目前我已经定义了两条路线,我正在使用Zend的url helper和named route但是它会重置params并且作为最终结果我有/ cat / cat_name / page / 1 url。

$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

在这种情况下,我是否需要创建自定义方法来组装网址?

2 个答案:

答案 0 :(得分:0)

我会尝试的事情:

  1. 在$ urlOptions中添加模块,控制器和操作参数(它是 您传递给视图助手的第一个数组)
  2. 而不是'category'路由名称尝试null并查看它的作用 您。
  3. 尝试删除此行     “resources.router.routes.category.defaults.category =”
  4. 请指定您使用的zf版本。

答案 1 :(得分:0)

解决方案非常简单,只需要将所有当前请求参数传递给url helper (并且在我的情况下可选地覆盖/添加其中一些,页面和类别),最后一个变量设置为FALSE以防止路由重置。

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