同福

做个web框架(6)——控制器Controller(三)接口控制器的实现【20201029】

介绍

介绍

今天福哥会带着大家实现接口控制器的逻辑以及它和路由模块的结合部分的逻辑,实现了这部分功能之后,就可以开发响应AJAX请求的接口了。

接口控制器一般情况下是采用JSON作为传输数据的格式的,所以这里面会用到php自带的两个函数json_encode和json_decode。当然,除了JSON格式外,接口还会有XML数据格式以及自定义文本格式。其中XML数据格式是比较老旧的数据格式,操作对象比较复杂,传输效率也不高我们就不介绍了。再有就是自定义文本格式,这个会根据一些项目的需要自定义一些特殊的格式,如果是这种情况就需要建立专用的控制器来提供支持,本文亦不介绍了。

接口控制器

接口控制器Controller/API/TFController,在这个对象里面会完成用户请求处理,用户内容响应等等功能。

控制器目录

我们建立一个用于展示接口控制器的示例接口程序,程序文件保存在WEB-INF/Controller/api/member/status.inc.php里面,用来显示当前用户的状态信息。

1d9e8e7b7b07a0ce.jpg

代码

TFController

response

protected function response(int $a=null,int $b=null,string $c=null,string $d=null,bool $e=false){
    $f=$this->tfphp->getResponse();
    if($a==null){
        $a=200;
    }
    if($b===null){
        $b=0;
    }
    if($c==null){
        $c="text/plain";
    }
    $d=strtoupper($d);
    $g=strtoupper(TFConfig::get("charset","system"));
    if($d==null){
        $d=$g;
    }
    $f->responseStatus($a);
    $f->responseContentType($c,$d,$e);
    $f->responseContentLength($b);
}

responseJson

protected function responseJson(int $a,string $b,int $c=null,string $d=null){
    $e=$this->tfphp->getResponse();
    if($c==null){
        $c=200;
    }
    $d=strtoupper($d);
    $f=strtoupper(TFConfig::get("charset","system"));
    if($d==null){
        $d=$f;
    }
    $e->responseStatus($c);
    $e->responseContentType("application/json",$d);
    $g=array('errcode'=>$a,'errmsg'=>$b,);
    $this->data=array_merge($g,$this->data);
    $h=json_encode($this->data);
    if($d!=$f){
        $h=mb_convert_encoding($h,$d,$f);
    }
    echo $h;
}

process

protected function process():?array {

    return null;
}

load

public function load(){
    $this->process();
}

示例

控制器程序

use TFPHP\Controller\API\TFController;

class APIController extends TFController{
    protected function process():?array {

        return array(
            'user'=>array(
                'userid'=>123456,
                'username'=>"福哥",
            )
        );
    }
}

讲解

下面福哥来讲解一下接口控制器Controller/API/TFController的函数的逻辑。

TFController

response

这个方法是接口控制器的核心方法,它负责将process方法处理后的数据转换成JSON数据格式后显示到用户面前。

这个方法包括一个$errcode和一个$errmsg,可以自定义返回接口的状态码和消息。

这个方法还可以自定义HTTP的状态码和消息,通过$httpCode和$httpMsg控制。

还有一个$charset可以设置返回数据的编码格式,但是福哥暂时没有实现它,以后再说哈~~

responseJson

这个方法是基于response方法的一个特殊方法,它用来向用户推送一个JSON格式的数据。

这个JSON数据来源与名为data的属性,它是一个数组,最终它会被转换为JSON字符串。

process

这个方法是一个空方法,是给控制器程序文件重载的一个保护方法,它用来实现具体控制器程序的业务逻辑。

load

这个方法是给路由模块进行自动调用的,它负责控制器程序的加载操作。

示例

控制器程序

这是一个接口的示例程序,我们通过process方法直接返回了一个数组数据。

4db1e2c86abf0944.jpg

总结

今天我们接口控制器的逻辑实现。现在通过TFPHP就可以制作接口程序了。

到目前为止,我们的TFPHP已经实现了路由模块和控制器模块,剩下的模型模块是最为复杂的一个模块,它涉及到数据库连接、实体对象、OOP编程等等一系列的内容。

下一课,福哥会带着童鞋们了解模型模块的原理,以及相关的知识和技术。

P.S.

微信公众号的文章发出去之后是不能编辑的,但是福哥偶尔会修复一些描述不到位、示例不正确、结构不清晰等等的文章错误,这些只能在网站上才能看到最新版本内容,望大家知晓~~