4.http服务之控制器

由于在3中设置了路由开启全局模式拦截,所以需要在Router.php中添加如下代码

// 控制器访问
        $routeCollector->get('/test1','/Index/test1');
        $routeCollector->get('/test2','/Index/test2');


        // requestTest
        $routeCollector->addRoute(['GET','POST'],'/requestTest','Test/requestTest');
        // responseTest
        $routeCollector->addRoute(['GET','POST'],'/responseTest','Test/responseTest');
        // index
        $routeCollector->addRoute(['GET','POST'],'/indexTest','Test/index');

对应的控制器代码如下,其中注释已经很清楚了
Index.php文件代码如下

<?php
namespace App\HttpController;

use EasySwoole\Http\AbstractInterface\Controller;
use EasySwoole\Http\Message\Status;

class Index extends Controller
{
    //在准备调用控制器方法处理请求时的事件,如果该方法返回false则不继续往下执行.可用于做控制器权限验证.
    protected function onRequest(string $action): ?bool
    {
        if(parent::onRequest($action)){
            if(rand(0,10)<5){//利用随机数,随机事件验证权限
                $this->writeJson(Status::CODE_UNAUTHORIZED,'','代码未授权');
                return false;
            }
            return true;
        }
        return false;
    }
    //当控制器方法执行结束之后将调用该方法,可自定义数据回收等逻辑
    protected function afterAction(?string $actionName): void
    {
        parent::afterAction($actionName); // TODO: Change the autogenerated stub
        $this->writeJson(Status::CODE_OK,'',"{$actionName}成功");
    }
    //当控制器逻辑抛出异常时将调用该方法进行处理异常(框架默认已经处理了异常)
    protected function onException(\Throwable $throwable): void
    {
        $this->response()->withStatus(Status::CODE_INTERNAL_SERVER_ERROR);
        $this->response()->write('系统繁忙,请稍后再试 ');
    }
    //gc 方法将在执行方法,afterAction完之后自动调用
    protected function gc()
    {
        parent::gc(); // TODO: Change the autogenerated stub
        $this->response()->write('gc');
    }

    function index()
    {
        // TODO: Implement index() method.
        $this->response()->write("hello word");
    }

    function rpc()
    {
        $this->response()->write("rpc_Index/rpc");
    }

    function test1()
    {
        $this->response()->write('this is test1');
        return '/test2';//当执行完test方法之后,返回/test2,让框架继续调度/test2方法
    }
    function test2()
    {
        $this->response()->write('this is test2');
        return true;
    }



}

Test.php文件代码如下

<?php


namespace App\HttpController;

use EasySwoole\Http\AbstractInterface\Controller;
use EasySwoole\Http\Message\Status;
use EasySwoole\Validate\Validate;

class Test extends Controller
{
    function index()
    {
        $request = $this->request();
        $requestParam = $request->getRequestParam();//获取post/get数据,get覆盖pos
        $validate = new Validate();
        $validate->addColumn('name','姓名')->required()->lengthMax(50);//姓名必填最长50字符
        if(!$this->validate($validate)){
            $this->writeJson(Status::CODE_BAD_REQUEST, [], $validate->getError()->__toString());
            return false;
        }
        $this->writeJson(Status::CODE_OK,$requestParam,'请求成功');
    }

    //request请求
    function requestTest()
    {
        $request = $this->request();
        $requestParam = $request->getRequestParam();//获取post/get数据,get覆盖pos
        $request->getMethod();
        $requestCookieParams=$request->getCookieParams();
        $this->writeJson(Status::CODE_OK,compact('requestParam','requestCookieParams'),'请求成功');
        return false;
    }
    //response响应
    function responseTest()
    {
        $response = $this->response();
        $value = uniqid();
        $response->setCookie('name',$value);
        $this->writeJson(Status::CODE_OK,$value,'设置cookie成功');
        return false;
    }
}

补充一些请求响应

// request请求
    function requestTest1()
    {
        $request = $this->request();
        $data = $request->getRequestParam();
        $orderId = $request->getRequestParam('orderId');
        $ab = $request->getRequestParam('a','b');
        //获取HTTP请求中的cookie信息
        $all = $request->getCookieParams();
        $name = $request->getCookieParams('name');
        $header = $request->getHeaders();
        $server = $request->getServerParams();
        $server['request_time'] = date('Y-m-d H:i:s',$server['request_time']);//格式化请求时间
        $this->writeJson(Status::CODE_OK,compact('data','orderId','ab','name','header','server'),'设置cookie成功');
        return false;
    }
    // response响应
    function responseTest1()
    {
        $this->response()->write('hello world');
        //将请求重定向至指定的URL
        //$this->response()->redirect("/requestTest1");
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值