# my_easy_swoole **Repository Path**: caoshenphp/my_easy_swoole ## Basic Information - **Project Name**: my_easy_swoole - **Description**: 基于easy_swoole的封装 - **Primary Language**: PHP - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-11-27 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # my_easy_swoole #### 介绍 基于easy_swoole框架,对http服务部分进行一些封装,引入拦截器,自定义配置读取类,助手类,新增了几个控制器和模型的方法,在App\HttpController\BaseController中和 App\Model\BaseModel中,后续的控制器可模型可继承这两个类使用。 #### 软件架构 #####App目录结构 ```php |-App |-Common // 公共文件目录 |-Exception // 自定义异常 |-Middleware // 中间件 |- SysMiddleware // 已经封装好的中间件 |-Queue // 队列消费者类目录 |-Config // 自定义配置文件 |-Extend // 第三方扩展 |-SysExtend // 框架相关功能的实现类 |-HttpController // 控制器目录 |-Model // 模型目录 |-Router // 路由文件 |-Service // 服务层目录 |-View // 视图文件 |-public // 静态资源目录 ``` #### 安装教程 1. 克隆项目即可 #### 使用说明 1. 拦截器 首先创建拦截器类,拦截器需实现App\Extend\SysExtend\Middleware\MiddlewareInterface接口,before为执行控制器前执行的方法,返回false即可拦截请求,不返回则通过拦截器,after为执行控制器方法后的方法。定义完成拦截器类之后, 可在Config/middleware.php文件中定义拦截器,定义方法是在数组中添加元素,键为需拦截的请求uri,值即是执行的拦截器的全类名,执行指定请求时会按顺序依次执行拦截器,键名中的*为通配符,表示后面所有的字符。 ```php return [ // 全局拦截器 '/*' => [ \App\Common\Middleware\GlobalMiddleware::class, ], // 只拦截/test/开头的请求 '/test/*' => [ \App\Common\Middleware\TestMiddleware::class, ], ]; ``` 2. 自定义配置读取类 在Config文件夹中定义的配置文件,可使用助手类Helper::config()方法获取配置信息,参数为文件名,需要读取文件名中的某项配置,可使用.语法, 在Config文件夹中只支持一级目录。 ```php use App\Extend\SysExtend\Helper; $config = Helper::config('database.host'); // 读取database文件中的host的值 ``` 3. 控制器 封装了一个BaseController控制器类,提供返回json,请求参数获取,服务层异常捕获以及验证方法。 ```php // 在控制器中: $this->get(); // 获取全部get参数 $this->get('name'); // 获取get中的name值 $this->get(['name','age'=>1]); // 获取get中的name和age的值,且给age设置默认参数 $this->success($data); // 返回code为1,data为data的json数据 $this->error($msg); // 返回code为0,msg为msg的json数据 // 验证方法具体支持的方法查看BaseController类的$validate_msg属性 $this->validateParams(需验证的参数数组,验证规则数组,[闭包数组]); $this->validateParams( $input, [ // 参数名|别名 => 验证方法用|隔开,有参数的用冒号引入, // 多个参数用,隔开,参数是数组则用&隔开数组元素 // 闭包验证为 func:闭包在闭包数组中的下标 // 汉字字母 长度1-10之间 非空 用闭包name验证 'name|姓名' => 'alphaDash|betweenLen:1,10|required|func:name', // 非空 在1-150之间 'age|年龄' => 'required|between:1,150' ], [ 'name' => function (EasySwoole\Spl\SplArray $v) { $name = $v->get('name'); // 获取name参数 // TODO 返回false则验证不通过 }, ] ); ``` 4. 模型 1).saveRow($data,$check,$use_set): 新增或者保存一条记录,$data为记录数据,包含主键为更新,否则为更新, $check为更新时的校验条件数组,[字段名=>值],不满足条件将返回异常提示,$use_set为是否使用修改器,默认使用。 2).makeWhere(array $request,array $field, string $as = ''):构造查询条件 @param array $request 请求参数数组 @param array $field 条件字段数组 [ [ 数据库字段名, 对比条件, 前端传来的键名 | 当对比条件为bt时: [开始键名,结束键名] | 开始键名 ] ] @param string $as 表别名 3).其他方法自行查看代码 5. Cache类 App\Extend\SysExtend\Cache\Cache类默认提供了基于redis驱动的缓存快速操作方法,为 get(key)获取缓存, set(key,value,timeout)设置缓存, inc(key,offset)自增, dec(key,offset)自减, del(key)删除 配置文件在Config/cache中,如果想自定义驱动,可以实现App\Extend\SysExtend\Cache\CacheInterface接口,然后指定配置即可 ```php // 设置aa值为1,10秒过期 App\Extend\SysExtend\Cache\Cache::set('aa',1,10); App\Extend\SysExtend\Cache\Cache::get('aa'); // 以10为步长自增 App\Extend\SysExtend\Cache\Cache::inc('aa',10); App\Extend\SysExtend\Cache\Cache::dec('aa',10); App\Extend\SysExtend\Cache\Cache::del('aa'); ``` 6. 消息队列 消息队列配置文件为queue.php。 ```php return [ // 驱动 'driver' => \App\Extend\SysExtend\Queue\Driver\RabbitMQ::class, // 默认启动的队列 'boot_queue' => [ // 元素为队列名时,会自动以Common/Queue目录下队列名大驼峰写法的类为消费者类 'queue_name', // 键为队列名,值为消费者类 'queue_name' => Consumer::class ], // 驱动配置 \App\Extend\SysExtend\Queue\Driver\RabbitMQ::class => [ 'host' => '192.168.3.136', 'port' => 5672, 'user' => 'guest', 'password' => 'guest', 'default_name' => 'rabbit' ], ]; ``` 管理类为App\Extend\SysExtend\Queue\QueueManager,在使用中可以使用App\Extend\SysExtend\Helper::Queue()来获取管理类。 ```php use App\Extend\SysExtend\Helper; // 推送一条消息 Helper::Queue()->push(队列名,数据); // 推送一条延时消息 Helper::Queue()->later(队列名,数据,延时:秒); // 新增队列 Helper::Queue()->addQueue([队列名,| 队列名=>消费者类]); // 移除队列 Helper::Queue()->delQueue(队列1,队列2,...); // 获取一个队列 Helper::Queue()->getQueue(队列名); // 检查一个队列是否存在 Helper::Queue()->has(队列名); ``` 消费者类默认定义在Common/Queue目录下,具体写法可参照QueueConsumerEq.php; 7. 命令行 生成控制器: php easyswoole make:controller 控制器名, 生成在App/HttpController下; 生成模型: php easyswoole make:model 模型名, 生成在App/Model下; 生成路由文件: php easyswoole make:router 路由名, 生成在App/Router下; 生成中间件文件: php easyswoole make:middleware 中间件名, 生成在App/Common/Middleware下; 生成队列消费者类: php easyswoole make:consumer 消费者类名, 生成在App/Common/Queue下; ```php php easyswoole make:controller Index 或者 php easyswoole make:controller Api/Index ``` 8. 模板引擎 集成了TP模板引擎,模板语法与TP一致,模板默认目录为App\View目录下。 在控制器中使用$this->view(模板名,参数数组)即可渲染模板,模板名为模板目录下的模板路径,不需要后缀 在模板文件中,可使用 {:$_tph::方法名(参数)}来调用App\Extend\SysExtend\Template\TemplateHelper类中的静态方法。 ```php // 控制器中 return $this->view('a',['aa'=>[1,2,3],'bb'=>'lolo']); // 返回视图 return $this->redirect('http://www.baidu.com']); // 重定向 // 模板中 {:_tph::add(1,2)} // 调用App\Extend\SysExtend\Template\TemplateHelper的add方法 ``` 9. Session 使用session前需使用SessionMiddleware中间件开启session, 此Session并非原生Session,而是基于缓存实现的session功能。 开启session后,在控制器中可使用Helper::session()获取缓存对象,提供get、set和clear方法。 ```php Helper::session()->set('aa',['bb'=>1]); // 设置session Helper::session()->get('aa.bb'); // 获取session中aa中的bb的值; Helper::session()->clear(); // 清空session ```