ThinkPHP U方法中使用路由的问题与解决办法



U方法中使用路由的问题

在 ThinkPHP 2.0 版本,U方法中使用路由会有明显的问题(bug)。下面以本节前文《ThinkPHP 路由使用》文中的例子为例来说明在ThinkPHP U方法中使用路由的问题与解决方案。

路由定义(如果使用 ThinkPHP 2.1RC 及更高版本,请同时参阅《ThinkPHP 2.1 路由规则对比 2.0 版本的变更》)如下:

return array(
    // 常规路由
    'product'=>array('Products', 'show', 'category,product_id', 'status=1'),
)

对应的 URL 访问地址例子如下:

index.php/product/5/123

根据《ThinkPHP2.0完全开发手册》例子,在U方法中使用该路由:

<a href="{:U('product@?category=3&product_id=123')}">产品详情</a>

生成的 URL 地址如下:

<a href="index.php/product/category/3/product_id/123">产品详情</a>

显然生成的 URL 地址有误。

U方法中使用路由

要在U方法中使用路由,简单一点的办法是依照实际的URL地址手动写定,如上例的写法为:

<a href="{:U('product/3/123')}">产品详情</a>

如果有项目分组或者URL参数分隔符为 - 等:

// 项目分组
U('Admin/product/3/123')
// 参数分隔符为 -
U('product/3-123')
// 项目分组,参数分隔符为 -
U('Admin-product/3-123')
// 参数分隔符为 - ,参数为变量的例子
U('product/'.$_GET['cat_id'].'-'.$list['product_id'])

在 ThinkPHP 2.0 版本,U方法中使用路由的 bug ,只希望在后续版本中能得到完善与解决。

    ThinkPHP URL 路由功能详解与实例
    ThinkPHP URL 正则路由与实例
    ThinkPHP 使用U方法自动生成URL超链接
    ThinkPHP 2.0 URL 路由(2.0版本适用)
    ThinkPHP 2.0 泛路由使用详解(2.0 版本适用)
    ThinkPHP 2.1 版本 URL 路由规则对比 2.0 版本的变更
    ThinkPHP U方法中使用路由的问题与解决办法

zgguan.com(it学习网) — 提供最好的 XHTML教程DIV+CSS教程JavaScript教程PHP教程ThinkPHP教程