多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
* 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回收逻辑.