thinkphp5基本的一些操作/API友好/获取请求信息(Request)/判断请求类型(GET...)/验证参数数据(Validate)/连接数据库/原生sql语句查询

文章目录

      • 一、API友好
        • 1.举两个thinkphp5关于API友好的例子
          • (1)数据输出
          • (2)错误调试Trace
      • 二、获取请求信息(Request)
        • 1.获取URL信息
        • 2.获取 模块/控制器/操作名称
        • 3.获取请求参数(params)
        • 4.获取路由和调度信息
      • 三、判断请求类型(GET/POST/PUT......)
      • 四、验证参数数据
      • 五、连接数据库
      • 六、原生SQL语句查询

一、API友好

官方文档:https://www.kancloud.cn/manual/thinkphp5/118017

        API (Application Programming Interface):简单来说就是应用程序编程接口
       我对API友好的理解:指原本一些复杂的操作方法函数,在thinkphp5里面被包装成类库,咱们可以更加方便的使用类库去实现我们想要实现的操作效果。
       下面引入一位大神对于API的理解 ,我感觉他讲解的挺好的。

       作为一个编程初学者来说,API函数也许是一个时常耳闻却感觉有些神秘的东西。单看它的复杂语法,就足令人望而生畏,但是任何事物在我们深入了解它之前,总是会有这种感觉的。我们这篇API入门教程的目的,就是要把API函数的来龙去脉告诉大家,破除对API函数的畏惧,使它成为我们编程的好助手。
       大家可能在许多书上看到过API的英文全称(Application Programming Interface),WIN32 API也就是MicrosoftWindows 32位平台的应用程序编程接口。对这个定义的理解,需要追溯到操作系统的发展历史上,当WINDOWS操作系统开始占据主导地位的时候,开发WINDOWS平台下的应用程序成为人们的需要。而在WINDOWS程序设计领域处于发展的初期,WINDOWS程序员所能使用的编程工具唯有API函数,这些函数是WINDOWS提供给应用程序与操作系统的接口,他们犹如“积木块”一样,可以搭建出各种界面丰富,功能灵活的应用程序。所以可以认为API函数是构筑整个WINDOWS框架的基石,在它的下面是WINDOWS的操作系统核心,而它的上面则是所有的华丽的WINDOWS应用程序。
       但是,那时的WINDOWS程序开发还是比较复杂的工作,程序员必须熟记一大堆常用的API函数,而且还得对WINDOWS操作系统有深入的了解。然而随着软件技术的不断发展,在WINDOWS平台上出现了很多优秀的可视化编程环境,程序员可以采用“即见即所得”的编程方式来开发具有精美用户界面和功能强大的应用程序。
       这些优秀可视化编程环境操作简单、界面友好(诸如VB、VC 、DELPHI等),在这些工具中提供了大量的类库和各种控件,它们替代了API的神秘功能,事实上这些类库和控件都是构架在WIN32 API函数基础之上的,是封装了的API函数的集合。它们把常用的API函数的组合在一起成为一个控件或类库,并赋予其方便的使用方法,所以极大的加速了WINDOWS应用程序开发的过程。有了这些控件和类库,程序员便可以把主要精力放在程序整体功能的设计上,而不必过于关注技术细节。
       实际上如果我们要开发出更灵活、更实用、更具效率的应用程序,必然要涉及到直接使用API函数,虽然类库和控件使应用程序的开发简单的多,但它们只提供WINDOWS的一般功能,对于比较复杂和特殊的功能来说,使用类库和控件是非常难以实现的,这时就需要采用API函数来实现。
       这也是API函数使用的场合,所以我们对待API函数不必刻意来研究每一个函数的用法,那也是不现实的(能用的到的API函数有几千个呢)。正如某位大虾所说:API不要去学,在需要的时候去查API帮助就足够了。

1.举两个thinkphp5关于API友好的例子

(1)数据输出

namespace app\index\controller;
class Index
{public function index()    {echo "十年磨一剑";echo "
"
;echo "where: app/index/controller/Index.php/Index->index()";echo "
"
;$data = ['name'=>'thinkphp','url'=>'thinkphp.cn'];//config.php中设置--->'default_return_type'=>'json'//即可返回json类型的数据return ['data'=>$data,'code'=>1,'message'=>'操作完成1']; // 支持指定json数据输出return json(['data'=>$data,'code'=>1,'message'=>'操作完成2']);// 支持指定xml数据输出return xml(['data'=>$data,'code'=>1,'message'=>'操作完成3']);//核心支持的数据类型包括view、xml、json和jsonp,其他类型的需要自己扩展。} }
  • 运行结果:
    在这里插入图片描述
(2)错误调试Trace

       由于API开发不方便在客户端进行开发调试,但ThinkPHP5的Trace调试功能支持Socket在内的方式,可以实现远程的开发调试

设置方式:

//config.php'app_trace' => true,
'trace'     => ['type'             => 'socket', // socket服务器'host'             => 'slog.thinkphp.cn',
],

       然后安装chrome浏览器插件后即可进行远程调试,详细参考调试部分。
在这里插入图片描述
在这里插入图片描述

二、获取请求信息(Request)

如果要获取当前的请求信息,可以使用\think\Request

  • $request = Request::instance();//创建一个请求对象调用Request类库方法来实现相关功能
  • $request = request();//还可以使用助手函数
  • 官方文档:https://www.kancloud.cn/manual/thinkphp5/158834

1.获取URL信息


namespace app\index\controller;
use think\Request;
class Index {public function index() {$request = Request::instance();// 获取当前域名echo '当前域名: ' . $request->domain() . '
'
;// 获取当前入口文件echo '当前入口文件: ' . $request->baseFile() . '
'
;// 获取当前URL地址 不含域名echo '当前URL地址 不含域名: ' . $request->url() . '
'
;// 获取包含域名的完整URL地址echo '获取包含域名的完整URL地址: ' . $request->url(true) . '
'
;// 获取当前URL地址 不含QUERY_STRINGecho '获取当前URL地址 不含QUERY_STRING: ' . $request->baseUrl() . '
'
;// 获取URL访问的ROOT地址echo '获取URL访问的ROOT地址:' . $request->root() . '
'
;// 获取URL访问的ROOT地址echo '获取URL访问的ROOT地址: ' . $request->root(true) . '
'
;// 获取URL地址中的PATH_INFO信息echo '获取URL地址中的PATH_INFO信息: ' . $request->pathinfo() . '
'
;// 获取URL地址中的PATH_INFO信息 不含后缀echo '获取URL地址中的PATH_INFO信息 不含后缀: ' . $request->path() . '
'
;// 获取URL地址中的后缀信息echo '获取URL地址中的后缀信息: ' . $request->ext() . '
'
;}}

在这里插入图片描述

2.获取 模块/控制器/操作名称


namespace app\index\controller;
use think\Request;
class Index {public function index() {$request = Request::instance();echo "当前模块名称是  ". $request->module();echo "
当前控制器名称是 "
. $request->controller();echo "
当前操作名称是"
. $request->action();"
"
;} }

在这里插入图片描述

3.获取请求参数(params)


namespace app\index\controller;
use think\Request;class Index {public function index() {$request = Request::instance();echo '请求方法:' . $request->method() . '
'
;echo '资源类型:' . $request->type() . '
'
;echo '访问ip地址:' . $request->ip() . '
'
;echo '是否AJax请求:' . var_export($request->isAjax(), true) . '
'
;echo '请求参数:';dump($request->param());echo '请求参数:仅包含name';dump($request->only(['name']));echo '请求参数:排除name';dump($request->except(['name']));}}

在这里插入图片描述
在这里插入图片描述

4.获取路由和调度信息


namespace app\index\controller;
use think\Request;class Index {public function index() {$request = Request::instance();echo '路由信息:';dump($request->route());echo '调度信息:';dump($request->dispatch());}}

在这里插入图片描述

三、判断请求类型(GET/POST/PUT…)

       在很多情况下面,我们需要判断当前操作的请求类型是GET、POST、PUT、DELETE或者HEAD,一方面可以针对请求类型作出不同的逻辑处理,另外一方面有些情况下面需要验证安全性,过滤不安全的请求。
       ThinkPHP5.0 取消了用于判断请求类型的系统常量(如IS_GET,IS_POST等),统一采用 think\Request类 处理请求类型。

用法如下:


namespace app\index\controller;
use think\Request;class Index {public function index() {$request = Request::instance();// 是否为 GET 请求if ($request->isGet()) echo "当前为 GET 请求";// 是否为 POST 请求if ($request->isPost()) echo "当前为 POST 请求";// 是否为 PUT 请求if ($request->isPut()) echo "当前为 PUT 请求";// 是否为 DELETE 请求if ($request->isDelete()) echo "当前为 DELETE 请求";// 是否为 Ajax 请求if ($request->isAjax()) echo "当前为 Ajax 请求";// 是否为 Pjax 请求if ($request->isPjax()) echo "当前为 Pjax 请求";// 是否为手机访问if ($request->isMobile()) echo "当前为手机访问";// 是否为 HEAD 请求if ($request->isHead()) echo "当前为 HEAD 请求";// 是否为 Patch 请求if ($request->isPatch()) echo "当前为 PATCH 请求";// 是否为 OPTIONS 请求if ($request->isOptions()) echo "当前为 OPTIONS 请求";// 是否为 cliif ($request->isCli()) echo "当前为 cli";// 是否为 cgiif ($request->isCgi()) echo "当前为 cgi";}}

在这里插入图片描述

四、验证参数数据


namespace app\index\controller;
use \think\Validate;
class Index {public function index() {$rule = [//验证规则'name' => 'require|max:25','age' => 'number|between:1,120','email' => 'email',];$msg = [//返回的错误信息'name.require' => '名称必须','name.max' => '名称最多不能超过25个字符','age.number' => '年龄必须是数字','age.between' => '年龄只能在1-120之间','email' => '邮箱格式错误',];$data = input('post.');//http请求方式post$validate = new Validate($rule,$msg);//实例化一个验证类对象$result = $validate->batch()->check($data);//batch()批量验证if (!$validate->check($data)) {//检查post方式传进的数据是否符合规则dump($validate->getError());//返回错误信息$msg}}
}

在这里插入图片描述

五、连接数据库

database.php/* 数据库设置 */
'database' => [// 数据库类型'type'        => 'mysql',// 服务器地址'hostname'    => '127.0.0.1',// 数据库名'database'    => 'thinkphp',// 数据库用户名'username'    => 'root',// 数据库密码'password'    => '',//自己设置的密码// 数据库连接端口'hostport'    => '',// 数据库连接参数'params'      => [],// 数据库编码默认采用utf8'charset'     => 'utf8',// 数据库表前缀'prefix'      => '',// 数据库调试模式'debug'       => false,
],

六、原生SQL语句查询


namespace app\index\controller;
use think\Db;//引用Db类库
class Index
{public function index(){$res = Db::query('select version()');dump($res);}
}

在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部