ThinkPHP5.0学习-路由

路由初体验

用户请求->路由解析->调度请求->执行操作->响应输出

路由就像一个一个总调度,把用户不同的请求,分发到对应的URL地址上

路由的作用:

1.根据事先定义的路由规则,检验URL请求,确定执行或拒绝;

2.路由规则可自定义,隐藏了原URL地址,使访问更安全,地址更优雅。

路由规则写在哪里?

1,路由规则写在与应用配置同级的route.php文件中;

2.路由规则主要使用路由类:Route::rule()方法注册;

a.创建Config文件夹,配置config.php,新建文件route.php,在config.php文件中打开路由

'url_route_on' => true,

在route.php文件中编写路由规则:

think\Route::rule('demo1','index/index/demo');

注意think前面没有\
在index文件夹下的index.php文件中编写demo方法

    public function demo()
    {
        return '我是demo方法';
    }

执行效果:

路由模式

 

创建配置目录config ,在此文件夹下新建Config.php,接管application目录的配置文件,配置路由开启。

在config文件夹下新建route.php文件配置路由。

普通模式:路由关闭,强制路由关闭。

混合模式:路由开启,强制路由关闭。

强制模式:路由开启,强制路由开启。


混合模式:一旦创建路由规则,就必须使用路由访问,否则可以使用PATH_INFO方式。

路由注册

一、动态方法:

Route::rule('路由规则','路由地址','请求类型',[路由参数],[变量规则]);

二、配置数组(配置文件方式)

return[

     '路由规则'=>'路由地址',

     '路由规则'=>['路由地址',[路由参数],[变量规则]]

];


<?php
/**
 * Created by PhpStorm.
 * User: wybing
 * Date: 2019/7/17
 * Time: 9:27
 */
//动态路由注册,GET方法传值,后缀必须是shtml,参数满足正则\w{1,10}
//think\Route::rule('demo/:lesson','index/index/demo','GET',['ext'=>'shtml'],['lesson'=>'{\w{1,10}}']);
return[
    'demo/:lesson'=>['index/index/demo',['method'=>'get','ext'=>'shtml'],['lesson'=>'\w{1,10}']],
    'test'=>'index/index/test',
];

路由规则

一、什么是路由规则?

路由规则就是用户最终用来访问URL地址,并非原始URL地址;

二、路由规则有哪几部分组成?

路由标识符/:变量名/:变量名/[:可选变量名]

think\Route::rule('demo/[:name]/[:lesson]','index/index/demo','GET',['ext'=>'shtml'],['name'=>'\w{3,8}','lesson'=>'\w{1,10}']);

路由地址

一、什么是路由地址?

路由地址,就是用户用路由规则访问页面时,真实跳转到的地址

二、路由地址的种类?

路由到:模块/控制器/操作

   基本语法:

   Route::rule('路由规则','模块/控制器/操作');

   重点理解:

   1.可访问控制器:'url_controller_layer'=>'controller',

   2.按从右到左的顺序进行地址解析:操作->控制器->模块

   3.支持额外参数(查询方式):?变量名1=值1&变量名2=值2...

think\Route::get('demo/:name','index/index/demo?lesson=html5');

路由到:操作方法

    基本语法:

     Route::rule('路由规则','@模块/控制器/操作')

     重点理解:

      1.跳过模块初始化,直接执行控制器中的方法

      2.模块初始化:配置文件和公共文件

      3.调用视图时必须设置完整模板文件的路径

think\Route::get('demo/:name','@index/index/demo?lesson=html5');

路由到:类的方法(动态与静态)

一、基本语法

Route::rule('路由规则','\完整命名空间\类名@动态操作');

Route::rule('路由规则','\完整命名空间\类名::静态操作');

二、重点理解

1.类必须创建在应用目录或字目录中

2.静态方法支持外部动态访问,但建议在语法上分开

3.为了项目规范,除非不得已,否则尽可能少用

在application目录下新建Test.php,里面有test方法。

think\Route::get('test','\app\Test@test');

路由到:重定向地址(301)

一、基本语法

Route::rule('路由地址','重定向地址');

二、重点理解

1.重定向地址:‘/’或者'http://'开头的外部地址

2.'/':是以当前可访问的Web目录开始:如'public'

3.外部地址是301跳转,适用于网站迁移

think\Route::rule('myjump','/test.php');
//'http://wybing.com'

路由到:闭包函数

一、基本语法

Route::rule('路由规则',function([参数]){

    //闭包函数代码

});

二、重点理解

1.闭包就是函数中的函数,或方法中的方法。

2.闭包函数可以接受通过路由规则传过来的参数,也就是路由变量

3.不再执行任何操作,相当于把方法直接定义在参数中。

think\Route::get('myfunc/:hello',function($hello){
    return '网站维护中...'.$hello;
});

路由参数

一、什么是路由参数?

路由参数是用来验证当前的路由规则是否有效的重要依据

二、路由参数的种类?

1.请求类型:['method'=>'get|post']

2.URL后缀:['ext'=>'html|stml']/['deny_ext'=>'php']

3.回调函数:['callback'=>'回调函数名称']

4.域名检测:['domain'=>'tp5.com']

5.更多参数,如绑定模块/合并额外参数等请查阅手册


一、请求类型

最常用的是:GET和POST,其他了解即可(如delete,put等)

二、使用方法

1.如注册方法已声明类型则无设置:Rule::get()/post();

2.Route::rule()/any():['method'=>'get|post']

3.使用路由配置文件数组定义:['method'=>'get|post']

//think\Route::rule('demo','index/index/demo','GET',[],[]);
return [
    'demo'=>['index/index/demo',['method'=>'get'],[]],
];

二、URL后缀/扩展名

一、说明

限定可访问路由规则的URL后缀名称,默认为html

二、使用方法

1.允许的URL后缀:['ext'=>'html|shtml']

2.禁止的URL后缀:['deny_ext'=>'jpg|png']

3.允许URL后缀为空:['ext'=>'']

4.禁止的URL后缀为空:['deny_ext'=>'']

return [
    'demo'=>['index/index/demo',['method'=>'get','deny_ext'=>''],[]],
];

三、用回调来验证路由规则

一、说明

回调函数返回true则路由规则有效,否则无效

二、使用方法

1.回调函数写在应用公共方法中,common.php

2.语法:['callback'=>'回调函数名称']

例如:用回调来检测是否存在某个应用配置项,来决定是否执行路由规则

在config.php文件中新建配置项

'site_domain'=>'www.php.cn',

在common.php公共文件中创建公共检查函数

function my_check(){
    $domain=\think\Config::get('site_domain');
    if($domain){
        return true;
    }else{
        return false;
    }
}

在route.php文件中配置路由规则

'demo'=>['index/index/demo',['method'=>'get','callback'=>'my_check'],[]],

四、域名验证

一、说明

检测调用当前路由规则的域名是不是参数所指定的域名

二、使用方法

1.语法格式:['domain'=>'域名']

2.支持子域名:['domain'=>'子域名']

    'demo'=>['index/index/demo',['method'=>'get','domain'=>'tp5.com'],[]],

变量规则

正则表达式

1.什么是正则表达式?

描述字符串匹配模式,主要用于字符串的查找/替换/与分割

2.正则表达式有哪几部分组成?

1.由:定界符、原子、元字符和修正符,四部分组成

2.定界符:通常用#,~~./等非原子或字符串反斜杠\都行

3.原子:需要匹配的字符,由可见与不可见字符组成

4.元字符:限定或修饰原子部分,不能单独使用

5.修正符:限定或修饰整个正则表达式


一、什么是路由变量规则?

用来对动态路由规则中的变量部分,进行校验的依据。

二、变量规则的使用域

1.局部变量规则:仅对当前路由有效

Route::rule('路由规则','路由地址','请求类型',[路由参数],['变量规则']);

例如:Route::rule('demo','index/demo','GET',[],['id'=>'\d{4}']);

2.全局变量规则:已注册的全部路由规则都要遵守

1.单独创建:Route::pattern('变量名','正则表达式');

2.批量创建:Route::pattern([

       '变量名'=>'正则表达式1',

       '变量名'=>'正则表达式2',

]);

think\Route::pattern([
    'name'=>'[a-zA-Z]+',
    'age'=>'\d{2}',
]);
return [
    '__patter__'=>[
        'name'=>'[a-zA-Z]',
        'age'=>'\d{2}',
    ],
    'test/:name/:age'=>'index/index/test'
];

局部优先级要高于全局

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乌药ice

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值