主业iOS/PHP,副业啥都玩,QQ:705719110,欢迎来撩!

thinkphp5 路由

PHP开发 随风 169℃ 0评论

一、什么是路由

路由的作用是为了简化URL访问地址,提高URL地址的可读性。Thinkphp5通过我们定义的路由来调用不同的控制器进行执行,最后将返回结果输出到浏览器中。

二、thinkphp5中的路由模式

1、普通模式
关闭路由,完全使用默认的PATH_INFO方式URL:

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

但仍然可以通过操作方法的参数绑定、空控制器和空操作等特性实现URL地址的简化。
可以设置url_param_type配置参数来改变pathinfo模式下面的参数获取方式,默认是按名称成对解析,支持按照顺序解析变量,只需要更改为:

2、混合模式
开启路由,并使用路由定义+默认PATH_INFO方式的混合:

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

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

这种方式下面必须严格给每一个访问地址定义路由规则(包括首页),否则将抛出异常。
首页的路由规则采用/定义即可,例如下面把网站首页路由输出Hello,world!(有点Laravel的味道啊~)

三、thinkphp5中常见路由定义方法

1.普通路由
路由注册可以采用方法动态单个和批量注册,也可以直接定义路由定义文件的方式进行集中注册。
动态注册
路由定义采用\think\Route类的rule方法注册,通常是在应用的路由配置文件application/route.php进行注册,格式是:

Route::rule(‘路由表达式’,’路由地址’,’请求类型’,’路由参数(数组)’,’变量规则(数组)’);

然后我们访问
http://think5.test/userinfo

发现和访问下面的默认路由效果是一样的
http://think5.test/index/user/info

路由参数
可以在配置的时候添加参数,比如添加后缀

那么访问的时候必须有后缀名,不然会访问不到
http://think5.test/userinfo.html

也可以在访问的时候添加参数

那就可以传递一个id参数了
http://think5.test/userinfo/1.html

具体的使用方式太多惹,可以查看官方文档~

2.资源路由
thinkphp5支持设置RESTFul请求的资源路由,会快捷生成我们需要的路由,当然了,控制器中一定要写对应的方法,不然会报错滴,方式如下:

这就很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.快捷路由
快捷路由允许你快速给控制器注册路由,并且针对不同的请求类型可以设置方法前缀,例如:

然后我们访问的路由就变成下面的了
get http://think5.test//user/info

但是会报错,因为需要我们去写对应的方法,其实就是方法名以请求方法开头,比如

四、thinkphp5中的miss路由

在网站开发的时候,为了提高用户的体验,我们一般都会单独定义一个404页面,在服务器出现问题的时候默认都跳转到这个404页面。在thinkphp5中,也为我们提供了一个miss路由的解决方案,当用户在访问一个并不存在的页面,thinkphp5会默认调用我们定义好的miss路由。例如:

当我们访问一个不存在的路由时,会默认调用上面路由中的方法。

五、thinkphp5中的分组路由

路由分组功能允许把相同前缀的路由定义合并分组,这样可以提高路由匹配的效率,不必每次都去遍历完整的路由规则。例如:

也可以定义局部的miss路由

六、thinkphp5中的路由绑定

可以使用路由绑定简化URL或者路由规则的定义,绑定支持如下方式:

绑定到模块/控制器/操作

把当前的URL绑定到模块/控制器/操作,最多支持绑定到操作级别,例如在路由配置文件中添加:

该方式针对路由到模块/控制器/操作有效,假如我们绑定到了index模块的user控制器,那么原来的访问URL从
http://think5.test/index/user/info/5

可以简化成(需要先定义路由的哦)
http://think5.test/info/5

绑定到命名空间
把当前的URL绑定到某个指定的命名空间,例如

那么,我们接下来只需要通过
http://serverName/user/info/5

绑定到类
把当前的URL直接绑定到某个指定的类,例如:

那么,我们接下来只需要通过
http://serverName/info/5

还有很多其他的,但是可能不常用,自己多看看文档研究啦~

转载请注明:怼码人生 » thinkphp5 路由

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址