以下是完全开发手册的内容
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+’]],
];