赞
踩
路由是开发过程中比较重要的一环,在ThinkPHP5.1版本后路由默认开启,并且不可以关闭,足以可见它的重要性。下面我们来具体的说一下;
注意事项
1、默认开启、不可关闭;
2、优先匹配、多模式支持;
3、匹配成功,不再继续匹配;
4、默认支持数字、字母、下划线,不支持中文及特殊符号;
PHP
主要作用
1、URL链接更加规范、美观,更加适合SEO优化;
2、隐式传入额外请求参数;
3、请求方式拦截,区分GET、POST等请求方式;
4、绑定请求数据;
5、处理请求缓存,优化程序响应时间;
6、路由中间件支持(V5.1.6+版本以上支持);
SEO优化
路由定义
1、定义位置:route/route.php文件内,可以在route目录内多文件定义,最终框架会进行路由整合,建议采用域名+分组模式定义路由。
2、定义方式:
Route::get('new/:id','News/read');// 定义GET请求路由规则Route::post('new/:id','News/update');// 定义POST请求路由规则Route::put('new/:id','News/update');// 定义PUT请求路由规则Route::delete('new/:id','News/delete');// 定义DELETE请求路由规则Route::any('new/:id','News/read');// 所有请求都支持的路由规则
请注意:
1、路由匹配成功后,原链接访问方式会失效;
2、完全匹配需在尾部添加$;
3、变量可有可无使用[]包裹变量;
变量规则
系统默认的变量规则设置是\w+,只会匹配字母、数字和下划线字符,并不会匹配特殊符号和中文,需要定义变量规则或者调整默认变量规则。
1、局部配置(仅在当前路由有效)
*定义GET请求路由规则 并设置name变量规则
Route::get('new/:name','News/read')->pattern(['name'=>'\w+']);
2、全局配置(全部路由有效)
*设置name变量规则(采用正则定义)
Route::pattern('name','\w+');
*支持批量添加
Route::pattern(['name'=>'\w+','id'=>'\d+',]);
3、组合变量
*组合变量的优势是路由规则中没有固定的分隔符,可以随意组合需要的变量规则和分割符
Route::get('item--','product/detail')->pattern(['name'=>'\w+','id'=>'\d+']);
PHP框架
路由地址
闭包支持
实际开发过程中不常用,是一种简单直接的定义模式;
Route::rule('hello/:name',function(Request $request, $name){$method = $request->method();return'['. $method .'] Hello,'. $name;});
路由参数
互联网开发
路由缓存
在定义大量的路由时,强烈建议使用路由缓存,注意仅在部署模式下有效,开启该缓存可以明显提升路由解析性能。
开启方式,在应用配置文件app.php中设置开启:
'route_check_cache'=>true,
开启后,会自动对每次的路由请求的调度进行缓存,第二次如果是相同的请求则无需再次经过路由解析,而是直接进行请求调度。
清除命令:
>php think clear --route
跨域请求
如果某个路由或者分组需要支持跨域请求,可以使用如下代码:
Route::get('new/:id','News/read')->ext('html')->allowCrossDomain();
注解路由
此方式不建议使用,缺点路由分散不方便管理,同时书写规则要求较为严格。
代码
路由分组
强烈建议使用,下面书写一种比较完善的路由分组写法:
Route::group(['method'=>'get','ext'=>'html'],function(){Route::group('blog',function(){Route::rule('blog/:id','blog/read');Route::rule('blog/:name','blog/read');});})->pattern(['id'=>'\d+','name'=>'\w+']);
MISS路由
如果希望在没有匹配到所有的路由规则后执行一条设定的路由,可以注册一个单独的MISS路由,总结来说,可以应用于404页面,防止程序找不到路由而报错(一旦设置了MISS路由,相当于开启了强制路由模式);
Route::miss('public/miss');
资源路由
实际开发过程中不常用,不做描述。
快捷路由
此方式要求在控制器层面定义方法名称较为严格,简单做一下描述,不建议使用。
*给User控制器设置快捷路由
Route::controller('user','index/User');<?phpnamespace app\index\controller;class User{public functiongetInfo(){ }}
代码
路由别名
路由别名不支持变量类型和路由条件判断,单纯只是为了缩短URL地址,并且在定义的时候需要注意避免和路由规则产生混淆。设置操作方法的请求类型:
*user 别名路由到 index/user 控制器
Route::alias('user','index/user',['ext'=>'html','allow'=>'index,save,delete','method'=>['index'=>'GET','save'=>'POST','delete'=>'DELETE'],]);
路由绑定
把当前的URL绑定到模块/控制器/操作,最多支持绑定到操作级别,例如在路由配置文件中添加:
*绑定当前的URL到 index模块
Route::bind('index');
*绑定当前的URL到 index模块的blog控制器
Route::bind('index/blog');
域名路由
支持完整域名、子域名和IP部署的路由和绑定功能,同时还可以起到简化URL、加快匹配的作用。
Route::domain(['blog','admin'],function(){Route::rule('new/:id','index/news/read');});
URL生成
支持路由URL地址的统一生成,并且支持所有的路由方式,但是不建议使用,直接在页面中手动设置,减少模板解析时间。
可以使用助手函数url,不需要继承框架基础控制器类即可使用,示例如下:
url('index/blog/read','id=5&name=thinkphp');
解析后为:/index.php/blog/5/name/thinkphp.html
其他配置方式不做过多讲解。请移步官方文档查看。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。