手记

ThinkPHP的URL访问模式

以下是完全开发手册的内容

URL设计
ThinkPHP 5.0 在没有启用路由的情况下典型的URL访问规则是:
http://serverName/index.php(或者其它应用入口文件)/模块/控制器/操作/[参数名/ 支持切换到命令行访问,如果切换到命令行模式下面的访问规则是:

php.exe index.php(或者其它应用入口文件) 模块/控制器/操作/[参数名/参数值…]
可以看到,无论是URL访问还是命令行访问,都采用 PATH_INFO 访问地址,其中 PATH_INFO 的分隔符是 可以设置的。
注意: 5.0 取消了URL模式的概念,并且普通模式的URL访问不再支持,但参数可以支持普通方式传值,例 如:
php.exe index.php(或者其它应用入口文件) 模块/控制器/操作?参数名=参数值&…

我说说我的理解

通过URL路径就能访问指定类的指定方法,传指定参数。
但是这样毫无保留的暴露的项目模块划分,将项目结构清晰的表现在了地址栏。
于是有了路由的概念。

路由

路由是什么?定义大概就是这样:将你访问的地址命名为另一个地址

路由模式

一、普通模式
关闭PATH_INFO方式的URL

‘url_route_on’ => false

二、混合模式
开启路由+PATH_INFO的模式

‘url_route_on’ => true,
‘url_route_must’=> false,

三、强制模式
开启路由,并设置必须定义路由才能访问:

‘url_route_on’ => true,
‘url_route_must’ => true,

首页的路由规则采用 / 定义即可,例如下面把网站首页路由输出 Hello,world!
Route::get(’/’,function(){ return ‘Hello,world!’;
});

推荐使用动态注册的方式,也就是上面这种 Route::get 这样的方式

动态注册
路由定义采用 \think\Route 类的 rule 方法注册,通常是在应用的路由配置文件 application/route.php 进行注册,格式是:
Route::rule(‘路由表达式’,‘路由地址’,‘请求类型’,‘路由参数(数组)’,‘变量规则(数组)’); 例如注册如下路由规则:
use think\Route;
// 注册路由到index模块的News控制器的read操作
Route::rule(‘new/:id’,‘index/News/read’);
我们访问:
http://serverName/new/5
ThinkPHP5.0的路由规则定义是从根目录开始,而不是基于模块名的。
会自动路由到:
http://serverName/index/news/read/id/5
并且原来的访问地址会自动失效。
路由表达式(第一个参数)支持定义命名标识,例如:
// 定义new路由命名标识
Route::rule([‘new’,‘new/:id’],‘index/News/read’);
注意,路由命名标识必须唯一,定义后可以用于URL的快速生成。
可以在rule方法中指定请求类型,不指定的话默认为任何请求类型,例如:
Route::rule(‘new/:id’,‘News/update’,‘POST’);
其中rule可以换成get、post、put、delete、any

// 开启路由定义的全局完全匹配

‘route_complete_match’ => true,

除了动态注册
定义路由配置文件
除了支持动态注册,也可以直接在应用目录下面的 route.php 的最后通过返回数组的方式直接定义路由规 则,内容示例如下:
return [
‘new/:id’ => ‘News/read’,
‘blog/:id’ => ‘Blog/update’,[‘method’ => ‘post|put’], [‘id’ => ‘\d+’]],
];

由于检测机制问题,动态注册的性能比路由配置要高一些,尤其是多种请求类型混合定义的时候

0人推荐
随时随地看视频
慕课网APP