路由作用
1.根据实现定义的路由规则,检验URL请求,确定执行或者拒绝;
2.路由规则可自定义,隐藏了原URL地址,使访问地址,使访问更安全,地址更优雅。
例如:http://tp5.com/edu/test/demo1和 return [ '路由规则'=>'路由地址', '路由规则'=>['路由地址',[路由参数],[变量规则]] ]; 路由规则就是用户最终用来访问的URL地址,并非原始URL地址; 路由标识符/:变量名1/:变量名2/:[:可选变量名] 路由地址,是用户最终要访问的URL,也是路由规则的目标,它不像路由规则,可以通过路由参数和变量规则进行检验,所以用户一定要确保路由地址的有效性。 路由地址,就是用户用路由规则访问页面时,真实跳转到的地址; 1)路由到:模块/控制器/操作; 基本语法:Route::rule('路由规则','模块/控制器/操作'); 重点理解: 可访问控制器:'url_controller_layer'=>'controller', 按从右到左的顺序进行地址解析:操作->控制器->模块, 支持额外参数(查询方式):?变量名1=值1&变量名2=值2.. 2)路由到:操作方法; 基本语法:Route::rule('路由规则','@模块/控制器/操作'); 重点理解: 跳过模块初始化,直接执行控制器中的方法; 模块初始化:配置文件和公共文件; 调用试图时必须设置完整模版文件的路径。 3)路由到:类的方法(动态与静态) 基本语法: Route::rule('路由规则','\完整命名空间\类名@动态操作'); Route::rule('路由规则','\完整命名空间\类名::静态操作'); 重点理解: 类必须创建在应用目录或子目录中; 静态方法支持外部动态访问,但建议在语法上分开; 为了项目规范,除非不得已,否者尽可能少用。 4)路由到:重定向地址(301) 基本语法:Route::rule('路由规则','重定向地址'); 重点理解: 重定向地址:'/'或者'http://'开头的外部地址; '/':是以当前可访问的Web目录开始:如'public'; 外部地址是301跳转,适用与网站迁移。 5)路由到:闭包函数 基本语法: Route::rule('路由规则',function([参数]){ //闭包函数 }); 重点理解: 闭包即使函数中的函数,或方法中的方法; 闭包函数可以接受通过路由规则传过来的参数; 不再执行任何操作,相当于把方法直接定义在参数中。 路由参数是用来检测路由地址的,准确的讲,是用来校验除了路由变量之外额所有内容。 路由参数是用来验证当前的路由规则是否有效的重要依据; 1)请求类型:['method'=>'get|post']; 请求类型:最常用的是GET和POST,其它了解即可(如delete,put等); 使用方法: 如注册方法已生命类型则无设置:Route::get()/post(); Route::rule()/any():['method'=>'get|post']; 使用路由配置文件数组定义:['method'=>'get|post']; 2)URL后缀:['ext'=>'html|shtml']/['deny_ext'=>'php']; 限定可访问路由规则的URL后缀名称,默认为html; 使用方法: 允许的URL后缀:['ext'=>'html|shtml']; 禁止的URL后缀:['deny_ext'=>'jpg|png']; 允许URL后缀为空:['ext'=>'']; 禁止的URL后缀为空:['deny_ext'=>'']; 3)回调函数:['callback'=>'tp5.com']; 说明:回调函数返回true则路由规则有效,否者无效; 使用方法: 回调函数写在应用公共方法中:common.php; 语法:['callback'=>'回调函数名称']; 例如:用回调函数检测是否存在某个应用配置项,来决定是否执行路由规则。 4)域名检测:['domain'=>'tp5.com']; 说明:检测调用当前路由规则的域名是不是参数所指定的域名; 使用方法: 语法格式:['domain'=>'域名']; 支持子域名:['domain'=>'域名']; 5)更多参数,如绑定模块/合并额外参数等请查阅手册。 用来对动态路由规则中的变量部分,进行校验的依据。 1 )局部变量规则:仅对当前路由有效 Route::rule('路由规则','路由地址','请求类型',['路由参数'],['变量规则']); 变脸规则:['动态变量1'=>'正则表达式1','动态变量2'=>'正则表达式2']; 例如:Route::rule('demo','index/demo','GET',[],['id'=>'\d{4}']); 2)全局变量规则:已注册的全部路由规则都要遵守 单独创建:Route::pattern('变量名','正则表达式'); 批量创建: Route::pattern([ '变量名1'=>'正则表达式1', '变量名2'=>'正则表达式2', ]); 路由变量规则和路由规则可以写在一起,以数组的形式。 描述字符串匹配模式,主要用于字符串的查找/替换与分割; 四部分组成:定界符,院子,元字符和修正符。 定界符:通常用#,~~,/等非原子或元字符反斜杠\都行。 原子:需要匹配的字符,由可见与不可见字符组成; 元字符:限定或修饰原子部分,不能单独使用; 修正符:限定或修饰整个正则表达式。 变量的规则是路由中的一个重点,也是保证路由规则安全的重要手段,当全局与局部的变量规则作用在同一个路由变量上面时,局部规则覆盖全局规则,即局部的优先级高于全局。 路由分组,看上去很直观,其实很抽象,它的高效云信,依赖于项目前期的科学规划。 当多个路由规则中,由相同的路由前缀时,分组可以可以提高效率。 动态方法:Route::group('分组名称',[路由地址,[路由参数],[变量规则]]); 配置数组:return['规则'=>[路由地址,[路由参数],[变量规则]]; 1)路由参数分类 闭包分组: Route::group('',function(){ //创建路由规则语句 }) 虚拟分组:根据相同路由参数进行分组 动态方法:Route::alias('规则名称','模块/控制器',[路由参数]); 静态数组: return[ 'alias'=>['规则名称','模块/控制器',[路由参数]], ]; 别名路由,可以进一步简化路由规则,但是不支持变量规则,仅仅是缩短URL地址,使用请求地址更坏短小优雅。借助路由参数中的allow和except参数实现黑白名单功能,比较有实际意义。 在入口文件中更添加:BIND_MODULE系统常量 //将当前访问绑定模块/控制器 define('BIND_MODULE','index');//模块级 define('BIND_MODULE','index/demo');//控制器级 入口文件名与应用中的模块自动绑定 1)入口自动绑定模块设置:'auto_bind_module'=>true, 2)创建需要绑定的入口文件:列如:admin.php 3)创建与入口文件对应的模块与控制器:application/admin/controller/Index.php,并创建默认index()方法 4)直接访问:域名/admin.php,就会自动执行admin模块中默认控制器中的默认方法 语法:Route::bind('模块[/控制器][/操作]'); 1)绑定当前的URL到模块 Route::bind('模块]'); 2)绑定当前的URL到模块下面的控制器 Route::bind('模块/控制器'); 3)绑定当前的URL到模块下面的控制器中的指定操作 Route::bind('模块/控制器/操作'); 1)绑定当前的URL到指定命名空间 Route::bind('app\index\controller','') 2)绑定当前的URL到类 结束。 你们的支持也是我前进的动力,非常感谢支持!2.配置数组(配置文件方式):
路由规则
路由地址
1.路由地址
2.路由地址的种类
路由参数
1.路由参数
2.路由参数的种类
变量规则
1.路由变量规则:
2.变量规则的使用域:
3..正则表达式
4.正则表达式有几部分组成
路由分组
1.什么情况下,适合进行路由分组?
2.分组方法
别名路由
1.快速注册同一控制器下所有操作方法(不支持变量规则)
路由绑定
1.入口绑定
2.入口自动绑定
3.动态绑定
4.绑定到命名空间或者类
作者:PlusNie
链接:https://www.jianshu.com/p/cedd6b564181
共同學習,寫下你的評論
評論加載中...
作者其他優質文章