think php 路由,thinkphp5 路由篇

[toc]

概述

由于ThinkPHP5.0默认采用的URL规则是:

路由解析的最终结果通常是把URL地址解析到模块的某个控制器下的操作方法,在特殊的情况下,也可以跳转到外部地址或者执行闭包函数。

新版的路由功能做了大量的增强,包括:

支持路由到模块(模块/控制器/操作)、控制器(控制器类/操作)、类(任何类库);

闭包路由的增强;

规则路由支持全局和局部变量规则定义(正则);

支持路由到任意层次的控制器;

子域名路由功能改进;

路由分组并支持分组参数定义;

通过函数自定义路由检测规则;

ThinkPHP5.0的路由比较灵活,系统支持三种方式的URL解析规则:

一、普通模式

关闭路由,完全使用默认的pathinfo方式URL:

'url_route_on' => false,

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

module/controller/action/param/value/...

但仍然可以通过Action参数绑定、空控制器和空操作等特性实现URL地址的简化。

二、混合模式

开启路由,并使用路由+默认PATH_INFO方式的混合:

'url_route_on' => true,

该方式下面,只需要对需要定义路由规则的访问地址定义路由规则,其它的仍然按照默认的PATH_INFO模式访问URL。

三、强制模式

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

'url_route_on' => true,

'url_route_must'=> true,

这种方式下面必须严格给每一个访问地址定义路由规则,否则将抛出异常。

首页的路由规则是 /。

注册路由规则

路由功能由think\Route类实现,包括路由注册和检测。

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

动态注册

使用Route类的register方法注册路由规则(通常可以在应用的公共文件中注册,或者定义配置文件后在公共文件中批量导入的方式注册),例如注册如下路由规则后:

\think\Route::register('new/:id','index/New/read');

我们访问:

http://serverName/new/5

ThinkPHP5.0的路由规则定义是从根目录开始,而不是基于模块名的。

其实是访问的:

http://serverName/index/new/read/id/5

可以在register方法中指定请求类型,不指定的话默认为任何请求类型,例如:

\think\Route::register('new/:id','New/update','POST');

表示定义的路由规则在POST请求下才有效。系统提供了为不同的请求类型定义路由规则的简化方法,例如:

\think\Route::get('new/:id','New/read'); // 定义GET请求路由规则

\think\Route::post('new/:id','New/update'); // 定义POST请求路由规则

\think\Route::put('new/:id','New/update'); // 定义PUT请求路由规则

\think\Route::delete('new/:id','New/delete'); // 定义DELETE请求路由规则

\think\Route::any('new/:id','New/read'); // 所有请求都支持的路由规则

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

\think\Route::register('new/:id','New/read','GET|POST');

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

\think\Route::register(['new/:id'=>'New/read','blog/:name'=>'Blog/detail']);

\think\Route::get(['new/:id'=>'New/read','blog/:name'=>'Blog/detail']);

\think\Route::post(['new/:id'=>'New/update','blog/:name'=>'Blog/detail']);

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

定义路由配置文件

如果不希望这么麻烦注册路由规则,可以直接在应用目录下面的route.php 直接定义路由规则,内容示例如下:

return [

'__pattern__' => [

'name' => '\w+',

],

'new/:id' => 'New/read',

'[blog]' => [

':id' => ['Blog/read', ['method' => 'get'], ['id' => '\d+']],

':name'

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值