序列化 闭包 php,Thinkphp 终极路由解决方案(超级伪静态)闭包的爽快使用

在ThinkPHP中我们使用伪静态的时候会产生一些问题,从而不能够很方便在用apache的rewrite规则来解决,不过官方因为这个问题给大家提供了一种高级解决方案就是route

我在使用ThinkPHP做项目的时候遇到这样的事情 route的规则是要匹配一下控制器

这就是官方在路由的例子里面为什么不使用别的方式,我也纳闷官方为什么没有解决这个问题

看官方的例子,然后我在写我的需求

'URL_ROUTER_ON' => true,

'URL_MAP_RULES'=>array(

'new/top' => 'news/index/type/top'

)

你看官方的这个例子,就是解决的new控制器下top路径重写的问题

再看一个

'/^new\/(\d{4})\/(\d{2})$/' => 'News/achive?year=:1&month=:2',

'new/:year/:month/:day'=>'News/read', // 静态地址和动态地址结合

我们的需求呢?我们的需求是不体现控制器我们要的是这样子的网址 http://www.xxx.com/getMember.html

包括http://wwww.xxx.com/getMember/username/xxxxx.html

http://www.xxx.com/1.html 包括http://www.xxx.com/1-1.html

http://www.xxx.com/getContent/1.html

我们需要的,官方提供的这些常规方式都无法解决怎么办,不要着急,官方还提供了一种办法叫做闭包支持

这就是我今天所要说的终极路由解决方案————ThinkPHP超级伪静态模式。

其实要匹配/getMember或者匹配/getContent我们在正则中都很方便只需要一个^get(\w{2,5})[^\/]这样就能匹配了, 更超级的方式是get(\w+[^\/])这样就可以匹配了,下面开始说闭包支持——终极路由解决方案

还是先放官方的例子

'URL_ROUTE_RULES'=>array(

'test' => function(){

echo 'just test';

},

'hello/:name' => function($name){

echo 'Hello,'.$name;

})

这是第一个,这样访问的时候你访问xxx/hellow/hainuo会发现浏览器只输出了 Hello,hainuo别的什么都没有

'/^new\/(\d{4})\/(\d{2})$/' => function($year,$month){

echo 'year='.$year.'&month='.$month;

}

这个例子也没有什么好说的,就是输出year=2015&month=6

这都不是我们需要的,难道闭包后就不能够继续运行后续的程序吗?

答案是肯定的,一定能支持后续程序运行的。

仔细看官方的示例还会发现,竟然有下面一个支持——我们的终极路由解决方案,超级为静态模式终于跟大家见面了,

'hello/:name' => function($name){

echo 'Hello,'.$name.'
';

$_SERVER['PATH_INFO'] = 'blog/read/name/'.$name;

return false;

}

假设blog控制器中的read操作方法代码如下:

public function read($name){

echo 'read,'.$name.'!
';

}

于是我们就顺利的找到了答案

'URL_ROUTE_RULES'=>array(

'/get(\w+)[^\/]'=>function(){

$_SERVER['PATH_INFO'] = 'blog/read/name/'.$name;

return false;

}

只需要在路由规则中如下填写,便ok了,这样设置后就会出现一个问题使用U方法得到URI将不再是我们所需要的,所以,在有关URI的地方请直接按照上面我们需要的规则填写。

备注一下:20140609

在闭包支持中,你使用IS_AJAX 会发现他始终为true 不清楚什么原因。这个留待以后研究吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值