内容简介:thinkphp5 路由
一、什么是路由
路由的作用是为了简化URL访问地址,提高URL地址的可读性。Thinkphp5通过我们定义的路由来调用不同的控制器进行执行,最后将返回结果输出到浏览器中。
二、thinkphp5中的路由模式
1、普通模式
关闭路由,完全使用默认的PATH_INFO方式URL:
'url_route_on' => false,
路由关闭后,不会解析任何路由规则,采用默认的PATH_INFO 模式访问URL:
http://think5.test/index.php/module/controller/action/param/value/...
但仍然可以通过操作方法的参数绑定、空控制器和空操作等特性实现URL地址的简化。
可以设置url_param_type配置参数来改变pathinfo模式下面的参数获取方式,默认是按名称成对解析,支持按照顺序解析变量,只需要更改为:
// 按照顺序解析变量 'url_param_type' => 1,
2、混合模式
开启路由,并使用路由定义+默认PATH_INFO方式的混合:
'url_route_on' => true, 'url_route_must'=> false,
该方式下面,只需要对需要定义路由规则的访问地址定义路由规则,其它的仍然按照第一种普通模式的PATH_INFO模式访问URL。
3、强制模式
开启路由,并设置必须定义路由才能访问:
'url_route_on' => true, 'url_route_must' => true,
这种方式下面必须严格给每一个访问地址定义路由规则(包括首页),否则将抛出异常。
首页的路由规则采用/定义即可,例如下面把网站首页路由输出Hello,world!(有点 Laravel 的味道啊~)
Route::get('/',function(){ return 'Hello,world!'; });
三、thinkphp5中常见路由定义方法
1.普通路由
路由注册可以采用方法动态单个和批量注册,也可以直接定义路由定义文件的方式进行集中注册。
动态注册
路由定义采用\think\Route类的rule方法注册,通常是在应用的路由配置文件application/route.php进行注册,格式是:
Route::rule(‘路由表达式’,’路由地址’,’请求类型’,’路由参数(数组)’,’变量规则(数组)’);
use think\Route; // 注册路由到index模块的user控制器的info操作 Route::get('/userinfo','user/info');
然后我们访问
http://think5.test/userinfo
发现和访问下面的默认路由效果是一样的
http://think5.test/index/user/info
路由参数
可以在配置的时候添加参数,比如添加后缀
Route::get('/userinfo','user/info',['ext'=>'html']);
那么访问的时候必须有后缀名,不然会访问不到
http://think5.test/userinfo.html
也可以在访问的时候添加参数
Route::get('/userinfo/:id','user/info',['ext'=>'html']);
那就可以传递一个id参数了
http://think5.test/userinfo/1.html
具体的使用方式太多惹,可以查看官方文档~
2.资源路由
thinkphp5支持设置RESTFul请求的资源路由,会快捷生成我们需要的路由,当然了,控制器中一定要写对应的方法,不然会报错滴,方式如下:
Route::resource('/user','index/User');
这就很laravel了啊,直接自动注册所有的路由,但是还不够智能~
标识 | 请求类型 | 生成路由规则 | 对应操作方法(默认) |
index | GET | user | index |
create | GET | user/create | create |
save | POST | user | save |
read | GET | user/:id | read |
edit | GET | user/:id/edit | edit |
update | PUT | user/:id | update |
delete | DELETE | user/:id | delete |
3.快捷路由
快捷路由允许你快速给控制器注册路由,并且针对不同的请求类型可以设置方法前缀,例如:
Route::controller('/user','index/User');
然后我们访问的路由就变成下面的了
get http://think5.test//user/info
但是会报错,因为需要我们去写对应的方法,其实就是方法名以请求方法开头,比如
public function getInfo(){ echo "获取用户信息"; }
四、thinkphp5中的miss路由
在网站开发的时候,为了提高用户的体验,我们一般都会单独定义一个404页面,在服务器出现问题的时候默认都跳转到这个404页面。在thinkphp5中,也为我们提供了一个miss路由的解决方案,当用户在访问一个并不存在的页面,thinkphp5会默认调用我们定义好的miss路由。例如:
Route::miss('index/miss');
当我们访问一个不存在的路由时,会默认调用上面路由中的方法。
public function miss(){ $response = new Response(); return $response->code(404)->data("没有找到页面"); }
五、thinkphp5中的分组路由
路由分组功能允许把相同前缀的路由定义合并分组,这样可以提高路由匹配的效率,不必每次都去遍历完整的路由规则。例如:
Route::group('user',function (){ Route::get('/info','user/info'); Route::get('/index','user/index'); });
也可以定义局部的miss路由
Route::group('user',function (){ Route::get('/info','user/info'); Route::get('/index','user/index'); Route::miss('user/miss'); });
六、thinkphp5中的路由绑定
可以使用路由绑定简化URL或者路由规则的定义,绑定支持如下方式:
绑定到模块/控制器/操作
把当前的URL绑定到模块/控制器/操作,最多支持绑定到操作级别,例如在路由配置文件中添加:
// 绑定当前的URL到 index模块 Route::bind('index'); // 绑定当前的URL到 index模块的user控制器 Route::bind('index/user'); // 绑定当前的URL到 index模块的user控制器的info操作 Route::bind('index/user/info');
该方式针对路由到模块/控制器/操作有效,假如我们绑定到了index模块的user控制器,那么原来的访问URL从
http://think5.test/index/user/info/5
可以简化成(需要先定义路由的哦)
http://think5.test/info/5
绑定到命名空间
把当前的URL绑定到某个指定的命名空间,例如
// 绑定命名空间 Route::bind('\app\index\controller','namespace');
那么,我们接下来只需要通过
http://serverName/user/info/5
绑定到类
把当前的URL直接绑定到某个指定的类,例如:
// 绑定到类 Route::bind('\app\index\controller\User','class');
那么,我们接下来只需要通过
http://serverName/info/5
还有很多其他的,但是可能不常用,自己多看看文档研究啦~
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- vue路由篇(动态路由、路由嵌套)
- 小程序封装路由文件和路由方法,5种路由方法全解析
- Vue的路由及路由钩子函数
- gin 源码阅读(二)-- 路由和路由组
- vue router 路由鉴权(非动态路由)
- Flutter进阶:路由、路由栈详解及案例分析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。