如何修改thinkPHP路由规则,使U方法自动生成伪静态链接

效果

假设网站域名是A.com,那么可以:
通过
A.com/xwzx.html
访问
A.com/Home/News/index.html?id=xwzx
或者通过
A.com/xwzx_1.html
访问
A.com/Home/News/index.html?id=xwzx&p=1

最关键的是:

使用
U('Home/News/index', array('id'=>xwzx))
生成
A.com/xwzx.html链接
或者使用
U('Home/News/index', array('id'=>xwzx,'p'=>1))
生成
A.com/xwzx_1.html链接
以此类推

目的

其实ThinkPHP3.2.3的路由部分使用场景并不多,究其原因是因为路由规则可以设置并正常访问,但是却没有自动生成路由的方法。比如说你配置完一个路由规则A.com/xwzx.html是可以正常访问的,却发现有大量的链接U('Home/News/index', array('id'=>xwzx))需要修改为/xwzx.html,使用的U方法并不能自动完成转化。
所以我们的目的就是,让U方法可以根据路由规则反推出伪静态的链接。这样做有什么好处呢?

  1. 如果有老项目需要配置全站的伪静态规则,这样做可以减少工作量,一切只需要配置即可。
  2. 在需要发起支付的页面,通常会带多个参数,这样就不利于我们配置支付接口的发起地址,此时用这个方法可以把多个参数合并到同一段URL中。更多支付接口配置内容请参考PHP支付接口教程,详解微信支付(一)
  3. 不需要做项目之前就事先处理伪静态页面,只需要正常写U方法即可,加快开发速度。

思路

修改ThinkPHP底层的U方法,当路由规则开启时,通过规则反推出伪静态链接。

配置规则同ThinkPHP官方的文档,Application/Common/Conf/config.php配置如下:

'URL_ROUTER_ON' => true, // 开启URL路由
'URL_ROUTE_RULES' => array(
//'CGIIP/:id/:p'=>'Home/News/index',
'/^([A-Za-z0-9]+)$/'=>'Home/News/index?id=:1',
'/^([A-Za-z0-9]+)_(d+)$/'=>'Home/News/index?id=:1&p=:2',
'4O4'=>'Admin/Index/notFound',
'test'=>'Home/Index/test',
), // 路由规则

修改ThinkPHP/Common/functions.php里面的U方法:

<script src="https://gist.coding.net/u/fourn/60d20945c81645b3b826330896c0fa93.js"></script>

完整functions.php文件代码在Coding中:

代码放到U方法中,“if($suffix){”这行代码之前。
注意这些都是针对ThinkPHP3.2.3版本的哦

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,769评论 19 139
  • //更改模块配置文件'URL_ROUTER_ON' => true,'URL_ROUTE_RUL...
    呦丶耍脾气阅读 4,599评论 0 0
  • 晚上轩轩吃奶奶,用手整痛我了,我没忍住大声骂了他一句,轩轩被吓得愣住了!那个表情我现在想起都觉得心痛!他并不是故意...
    J_Jun阅读 1,131评论 0 0
  • 活的自我2016.9.24
    JulyH阅读 1,176评论 0 0
  • 最近的几篇文章,不管质量高低,都是主动涌现到我的脑海里才写出来的,比如《关注学生生命成长》,《关注教师职业幸福》,...
    像话读书爻阅读 3,931评论 4 4