thinkphp 路由学习笔记
路由 (Route::rule('路由规则','路由地址','请求类型','路由参数(数组)','变量规则(数组)');)
在 应用层下,创建或者打开route.php文件 use think\Route; //导入Route类 Route::rule('add','index/index/add/'); //创建路由规则 对应的地址将是 127.0.0.1/tp5/public/add // 限制只能读取id值 Route::rule(['add','add/:id'],'index/index/add/'); //创建路由规则 Route::rule(['add','add/:student/[:sid]'],'index/index/add/'); // sid 可选
批量注册路由
Route::rule([ '路由规则1'=>'路由地址和参数', '路由规则2'=>['路由地址和参数','匹配参数(数组)','变量规则(数组)'] ... ],'','请求类型','匹配参数(数组)','变量规则'); --------------------------------------------------- Route::rule([ 'getinfo' => ['index/index/getinfo', ['ext'=>'shtml']], 'blog/:id' => ['Blog/update',['id'=>'\d{4}']], ],'','GET',['ext'=>'html'],['id'=>'\d+']); getinfo 解析到 index/index/getinfo 模块下 ext 代表 只解析 域名后缀为shtml的地址 第二个 ['ext'=>'html'] 表示,在其他路由没有定义的情况下,默认使用html后缀的解析
return 形式配置路由
return [ 'new/:id' => 'News/read', 'blog/:id' => ['Blog/update',['method' => 'post|put'], ['id' => '\d+']], ]
变量规则定义
全局规则
// 设置name变量规则(采用正则定义)
Route::pattern('name','\w+');
// 支持批量添加
Route::pattern([
'name' => '\w+',
'id' => '\d+',]);局部规则
/ 定义GET请求路由规则 并设置name变量规则
Route::get('new/:name','News/read',[],['name'=>'\w+']);可参考批量注册路由项
// 设置路由配置文件列表
'route_config_file' => ['home','admin'], application/home.php 配置home模块的路由规则, application/admin.php 则配置admin模块的路由规则。
查看路由规则
// 获取全部的路由信息 Route::rules(); // 获取GET路由信息 Route::rules('GET');
缓存路由
缓存路由很简单,到操作系统的命令行下面,在应用根目录下面执行命令: php think optimize:route
缓存路由
Route::group('show',function(){ Route::get('','index/Index/hello'); Route::post('','index/Index/insert'); Route::put('','index/Index/read'); Route::delete('','index/Index/del'); });
Route::group('分组名或分组参数','分组路由规则','公共路由参数','公共变量规则');
别名路由
Route::alias('路由别名','别名地址(控制器或类)','路由参数(数组)'); https://www.kancloud.cn/thinkphp/route-master/223114
快速生成Restful风格控制器
(进入根目录)php think make:controller index/Blog
自动生成
<?php namespace app\index\controller; use think\Controller; use think\Request; class Blog extends Controller { /** * 显示资源列表 * * @return \think\Response */ public function index() { // return 'get'; } /** * 显示创建资源表单页. * * @return \think\Response */ public function create() { // return 'create'; } *********
}
如果使用路由注册上面的方法的话
方法一:
Route::get('blogs','index/Blog/index');
Route::get('blogs/create','index/Blog/create');
Route::post('blogs','index/Blog/save');
Route::get('blogs/:id','index/Blog/read');
Route::get('blogs/:id/edit','index/Blog/edit');
Route::put('blogs/:id','index/Blog/update');
Route::delete('blogs/:id','index/Blog/delete');方法二:
Route::group(['name'=>'blogs','prefix'=>'index/Blog'], function() {
Route::get('/','index');
Route::get('create','create');
Route::post('/','save');
Route::get(':id','read');
Route::get(':id/edit','edit');
Route::put(':id','update');
Route::delete(':id','delete');
});方法三(简便):
Route::resource('blogs','index/Blog');
方法四(简便):
return [
// 定义资源路由
'rest' => [
'blogs' => 'index/Blog',
],]
https://www.kancloud.cn/thinkphp/route-master/223115
miss路由 (当为匹配到路由时候的规则)
Route::miss(function(){ return '请求错误'; });
AUTO路由 (在开启了强制路由的时候,如果没有任何路由匹配则自动解析相应的路由规则)
Route::group('blog',function(){ Route::auto('index'); Route::rule(':id','blog/read',[],['id'=>'\d+']); Route::rule(':name','blog/read',[],['name'=>'\w+']); },['method'=>'get','ext'=>'html']);
学习地址 https://www.kancloud.cn/thinkphp/route-master