由于在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");
}