thinkphp5 路由

栏目: PHP · 发布时间: 8年前

内容简介: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

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Sass and Compass in Action

Sass and Compass in Action

Wynn Netherland、Nathan Weizenbaum、Chris Eppstein、Brandon Mathis / Manning Publications / 2013-8-2 / USD 44.99

Written by Sass and Compass creators * Complete Sass language reference * Covers prominent Compass community plug-ins * Innovative approach to creating stylesheets Cascading Style Sheets paint the we......一起来看看 《Sass and Compass in Action》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具