* action
`action`是控制器最终执行的方法,根据路由的匹配不同,从而执行不同的控制器方法,例如默认执行的`index`方法,例如访问`ip/Index/test`最终解析的`test`方法,都可以称作`action`执行方法.
action方法可以返回一个字符串,从而让框架再次进行控制器方法调度,例如:
~~~php
<?php
/**
* Created by PhpStorm.
* User: Tioncico
* Date: 2019/4/11 0011
* Time: 14:40
*/
namespace App\HttpController;
use EasySwoole\EasySwoole\Trigger;
use EasySwoole\Http\AbstractInterface\Controller;
use EasySwoole\Http\Message\Status;
class Index extends Controller
{
function index()
{
$this->writeJson(200, [], 'success');
return '/test';
}
function test()
{
$this->response()->write('this is test');
return '/test2';//当执行完test方法之后,返回/test2,让框架继续调度/test2方法
}
function test2()
{
$this->response()->write('this is test2');
return true;
}
}
~~~
返回的字符串将会被`url解析规则`以及`route路由`规则解析,但是需要注意,千万不能A方法返回B方法,B方法再返回A方法的字符串,否则会出现无限死循环调用
* onRequest
~~~php
protected function onRequest(?string $action): ?bool
{
return true;
}
~~~
在准备调用控制器方法处理请求时的事件,如果该方法返回false则不继续往下执行.
可用于做控制器基类权限验证等,例如:
~~~php
function onRequest(?string $action): ?bool
{
if (parent::onRequest($action)) {
//判断是否登录
if (1/*伪代码*/) {
$this->writeJson(Status::CODE_UNAUTHORIZED, '', '登入已过期');
return false;
}
return true;
}
return false;
}
~~~
* afterAction
当控制器方法执行结束之后将调用该方法,可自定义数据回收等逻辑
* index
index是一个抽象方法,代表着继承控制器对象的都需要实现该方法,index 将成为默认的控制器方法.
* actionNotFound
当请求方法未找到时,自动调用该方法,可自行覆盖该方法实现自己的逻辑
该方法可以理解成`默认方法`,类似于`index`方法,所以调用完之后也会触发`afterAction`,`gc`等方法
* onException
当控制器逻辑抛出异常时将调用该方法进行处理异常(框架默认已经处理了异常)
可覆盖该方法,进行自定义的异常处理,例如:
~~~php
function onException(\Throwable $throwable): void
{
//直接给前端响应500并输出系统繁忙
$this->response()->withStatus(Status::CODE_INTERNAL_SERVER_ERROR);
$this->response()->write('系统繁忙,请稍后再试 ');
}
~~~
更多控制器异常相关可查看[错误与异常拦截](https://www.easyswoole.com/Cn/HttpServer/exception.html)
* gc
~~~php
protected function gc()
{
// TODO: Implement gc() method.
if ($this->session instanceof SessionDriver) {
$this->session->writeClose();
$this->session = null;
}
//恢复默认值
foreach ($this->defaultProperties as $property => $value) {
$this->$property = $value;
}
}
~~~
gc 方法将在执行`方法`,`afterAction`完之后自动调用
将控制器属性重置为默认值,关闭`session`
可自行覆盖实现其他的gc回收逻辑.