thinkphp5基本的一些操作/API友好/获取请求信息(Request)/判断请求类型(GET...)/验证参数数据(Validate)/连接数据库/原生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)数据输出
<?php
namespace app\index\controller;
class Index
{
    public function index()    {
        echo "十年磨一剑";
        echo "<br/>";
        echo "where: app/index/controller/Index.php/Index->index()";
        echo "<br/>";
        $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信息

<?php
namespace app\index\controller;
use think\Request;
class Index {

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

    }

}

在这里插入图片描述

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

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

在这里插入图片描述

扫描二维码关注公众号,回复: 8904152 查看本文章

3.获取请求参数(params)

<?php
namespace app\index\controller;
use think\Request;

class Index {

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

    }

}

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

4.获取路由和调度信息

<?php
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类 处理请求类型。

用法如下:

<?php
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 请求";
        // 是否为 cli
        if ($request->isCli()) echo "当前为 cli";
        // 是否为 cgi
        if ($request->isCgi()) echo "当前为 cgi";
    }

}

在这里插入图片描述

四、验证参数数据

<?php
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);//实例化一个验证类对象
        $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语句查询

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

在这里插入图片描述

发布了17 篇原创文章 · 获赞 1 · 访问量 887

猜你喜欢

转载自blog.csdn.net/weixin_43914604/article/details/99701940