转发自WhiteWolfStack:查看原文今天我们来看两期,枚举类和公共函数库的介绍。我们在最后一节枚举类的最后提出的问题其实就是如何自定义代码。为了方便错误码的管理,我们使用hyperf的枚举类进行管理。枚举类参考https://hyperf.wiki/3.0/#/zh-...枚举类依赖hyperf/constants组件,composer需要安装。composerrequirehyperf/constants:3.0.*生成枚举类phpbin/hyperf.phpgen:constantErrorCode生成的ErrorCode类修改如下:'datainfo'];}curl结果如下:?curlhttp://127.0.0.1:9501/index/info?id=0--header"lang:ja"{"code":0,"message":"IDガinvaliddesu"}%ErrorCode::PARAMS_ID_INVALID定义直接支持国际化,非常友好。但是并没有改变code=0的现状。稍微优化BusinessException如下:getMessage($代码);}parent::__construct($message,$code,$previous);}}IndexService::info改写如下:publicfunctioninfo(int$id){if($id<=0){//thrownewBusinessException(trans('params.id_invalid'));//抛出新的BusinessException(ErrorCode::getMessage(ErrorCode::PARAMS_ID_INVALID));抛出新的BusinessException(ErrorCode::PARAMS_ID_INVALID);}return['info'=>'datainfo'];}curl测试结果如下:?curlhttp://127.0.0.1:9501/index/info?id=0--header"lang:ja"{"code":100001,"message":"IDか无法です"}%公共函数库的介绍我们在AppExceptionHandler::handle方法中使用了一个函数,最后一行代码env('APP_ENV')=='开发'。这里的env函数定义在vendor/hyperf/utils/src/Functions.php文件中。在这个文件中,hyperf官方定义了很多函数,而在我们的项目中,也需要定义一些函数。比如我们封装一个函数convert_size,将bytes转换成KB或者MB,我们就不能改hyperf官方的源码包,在vendor/hyperf/utils/src/Functions.php文件中添加。这个很简单,利用composer的自动加载机制就可以了。在app下新建目录文件app/Utils/Functions.php,内容如下:大小*@returnstring*/functionconvert_size($size){$unit=['b','kb','mb','gb','tb','pb'];返回@round($size/pow(1024,$i=floor(log($size,1024))),2)。''。$单位[$i];}}修改根目录下composer.json文件中的autoload项如下:"autoload":{"psr-4":{"App\":"app/"},"files":["app/Utils/Functions.php"]},修改composer.json后需要执行composerdump-autoload-o命令。/data/project/questions#composerdump-autoload-oGeneratingoptimizedautoloadfiles>rm-rfruntime/containerGeneratedoptimizedautoloadfilescontaining3132classes重写IndexController::info方法:#[AutoController]classIndexControllerextendsAbstractController{publicfunction(){返回转换大小(内存获取使用情况(真));}}curl结果:?curl127.0.0.1:9501/index/info8mb%至此,我们几乎完成了框架的基本结构。下一节课,我们会补充一些swoole协程方面的知识。
