ThinkPHP5.0路由之路由注册

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41665015/article/details/80150270

路由

路由功能由\think\Route类完成

概述

由Think PHP5.0默认采用的URL规则是:

http://server/sodule/controller/action/param/value/.....

路由的作用是简化URL访问地址,并根据定义的路由类型做出正确解析。

路由模式

ThinkPHP5.0的路由比较灵活,并且不需要强制定义,可总结为以下三种方式:

一,普通模式

关闭路由,完全使用默认的PATH_INFO 访问URL;

url_route_on   =>false,

路由关闭后,不会解析任何路由规则,采用默认的PATH_INFO模式 访问URL;

http://server/Name/index.php/module/controller/action/param/value/.....

二、混合模式

开启路由后并使用路由定义+默认PATH_INFO方式的混合

url_route_on =>true,

url_route_must   =>false,


该方法下面,只需要对需要定义路由规则的访问地址定义路由规则,其他的仍然按照第一种普通模式的PATH_INFO 模式访问URL.

三、强制模式

开启路由,并设置必须定义路由才能访问:

url_route_on =>true,

url_route_must   =>true,

这种方式必须严格给每一个访问地址定义路由规则(包括首页),否则将抛出异常。

首页的路由规则采用/定义即可,例如下面把网站首页由输出Hello,world!我们现需要在route.php这个文件中配置路由,要使用官方的use  think\Route

Route::get( '/' ,function(){

            return  'Hello,world!';

 } );


则打开tp5进行访问的就是hello world!

路由定义

注册路由规则

路由注册可以采用方法动态单个和批量注册,也可以直接定义路由定义文件的方式进行集中注册。

动态注册

路由定义采用\think\Route类的rule方法注册,通常是在应用的路由配置文件application/route.php进行注册,格式是:

use think\Route;  //调用Route类方法

Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)');

例如注册如下路由规则:

 
 
  1. use think\Route;
  2. // 注册路由到index模块的News控制器的read操作
  3. Route::rule('new/:id','index/News/read');

我们访问:

 
 
  1. http://serverName/new/5

会自动路由到:

 
 
  1. http://serverName/index/news/read/id/5

并且原来的访问地址会自动失效。

路由表达式(第一个参数)支持定义命名标识,例如:

 
 
  1. // 定义new路由命名标识
  2. Route::rule(['new','new/:id'],'index/News/read');
ThinkPHP5.0的路由规则定义是从根目录开始,而不是基于模块名的。



当我们再次到浏览器访问的时候,访问的是list方法(list.html)\

注意,路由命名标识必须唯一,定义后可以用于URL的快速生成。

可以在rule方法中指定请求类型,不指定的话默认为任何请求类型,例如:(第三个请求类型)

 
 
  1. Route::rule('new/:id','News/update','POST');

表示定义的路由规则在POST请求下才有效。

请求类型包括: 类型 描述
GET GET请求
POST POST请求
PUT PUT请求
DELETE DELETE请求
* 任何请求类型

注意:请求类型参数必须大写。

系统提供了为不同的请求类型定义路由规则的简化方法,例如:

 
  
  1. Route::get('new/:id','News/read'); // 定义GET请求路由规则
  2. Route::post('new/:id','News/update'); // 定义POST请求路由规则
  3. Route::put('new/:id','News/update'); // 定义PUT请求路由规则
  4. Route::delete('new/:id','News/delete'); // 定义DELETE请求路由规则
  5. Route::any('new/:id','News/read'); // 所有请求都支持的路由规则


默认访问read方法



如果要定义get和post请求支持的路由规则,也可以用:

 
  
  1. Route::rule('new/:id','News/read','GET|POST');

我们也可以批量注册路由规则,例如:

 
  
  1. Route::rule(['new/:id'=>'News/read','blog/:name'=>'Blog/detail']);
  2. Route::get(['new/:id'=>'News/read','blog/:name'=>'Blog/detail']);
  3. Route::post(['new/:id'=>'News/update','blog/:name'=>'Blog/detail']);

注册多个路由规则后,系统会依次遍历注册过的满足请求类型的路由规则,一旦匹配到正确的路由规则后则开始调用控制器的操作方法,后续规则就不再检测。

定义路由配置文件

除了支持动态注册,也可以直接应用目录下面的rote.php的最后通过返回数组的方式直接定义路由规则,内容示例如下:

return [ 

'new/:id'=> 'index/Index/read',

‘blog/:id' => [ 'Blog/update' ,[ 'method' => 'post|put' ] , [ 'id' => '\d+' ] ],

];


路由动态注册和配置定义的方法可以并存,由于检测机制的问题,动态注册的性能比路由配置更高一些,尤其是多种请求类型混合定义的时候。

默认情况下,只会加载一个路由配置文件route.php,如果需要定义多个路由配置文件,可以修改route_config_file的配置参数,如:

 // 路由配置文件(支持配置多个)

    'route_config_file'      => ['route', 'route1', 'route2'],


时间:2018.4.30

猜你喜欢

转载自blog.csdn.net/qq_41665015/article/details/80150270