laravel开发辅助配置添加服务提供者在config/app.php文件中的providers数组中添加以下行:'providers'=>[...App\Plugins\Auth\Providers\LaravelServiceProvider::class]插件和文档redisToken认证Repository模式表单搜索辅助插件Excels导出辅助插件SignplusSql写入日志事件ControllerTraitsRepository模式插件介绍首先需要声明一下设计模式与使用的框架和语言无关。关键是理解设计模式背后的原理,这样无论你使用什么技术,都可以在实践中实现相应的设计模式。根据原提议者的介绍,Repository是连接数据映射层和领域层的纽带,相当于领域对象在内存中的集合。客户端对象将查询到的一些实体组合起来提交给Repository。可以从Repository中删除或添加对象,就像这些对象对Collection对象进行数据操作一样,映射层中的代码会相应地从数据库中获取相应的数据。从概念上讲,Repository将一个数据存储区域的数据封装成一个对象集合,并提供对这些集合的操作。Repository模式将业务逻辑和数据访问分离,两者通过Repository接口进行通信。通俗地说,Repository可以看做是一个仓库管理员。我们只需要找管理员从仓库中取东西(业务逻辑)即可。如果你想要它(Repository),你不需要自己去找它(数据访问)。具体过程如下图所示:不使用缓存创建Repositoryphpartisanmake:repoUser使用缓存phpartisanmake:repoUser--cache创建UserRepository时询问是否创建Model。如果Model存在,则需要将AppRepositoriesModulesUserProvider::class的Model替换为当前使用的Model来配置Providers。将以下行添加到AppProvidersAppServiceProvider::class文件的注册方法中:publicfunctionregister(){$this->app->register(\App\Repositories\Modules\User\Provider::class);}userepo=$repo;}publicfunctionindex(Request$request){return$this->respondWithSuccess($this->repo->get(['*']));}}更适合搜索Livepublicfunctionindex(Request$request){return$this->respondWithSuccess($this->repo->getwhere(newIndexSearch($request->olny(['name'])),['*']));}方法参考Repository方法表单搜索辅助插件插件介绍将表单提交的一些参数传入where语句。CreateSearch生成UserController::index控制器使用的搜索辅助类phpartisanmake:searchUser\IndexSearch上面命令会在创建AppSearchsModulesUserIndexSearch::class的类时创建Search,建议按照ControllerActionSearch格式编写Search'=','name'=>'like','日期'=>'之间'];公共函数getNameAttribute($value){返回$value。'%';}publicfunctiongetDateAttribute($value){returnfunction($query){$query->where('date','>','2018-05-05')->where('status',1);};}}使用Searchrepo=$repo;}publicfunctionindex(Request$request){返回$this->respondWithSuccess($this->repo->getWhere(newIndexSearch($request->only(['phone','name','date'])),['*']));}}生成的sql请求参数:phone=18565215214&name=JackieChan&date=2018-08-21生成的sqlWHERE(phone=18565215214)AND(namelike'JackieChan%')AND(date>'2018-05-05'ANDstatus=1)Excels导出辅助插件Excels导出辅助插件介绍创建Excelsphpartisanmake:excelUser上面的命令会创建一个类AppExcelsModulesUserExcel::classWriteSearchid,$this->phone,$this->name];}/***搜索参数*@return{[type]}[description]*/protectedfunctiongetAttributes(){returnnewExcelSearch(request()->only(['phone','name',]));}}更多用法参考maatwebsite/excelSqlwriteEnterlog-event介绍将sql语句记录到日志中使用laravel自带的EventServiceProvider类中的listen添加'Illuminate\Database\Events'=>['luffyzhao\laravelTools\Listeners\QueryListeners']生成事件phpartisanevent:generateControllerTraits在AppHttpControllersController类中引入controllerpublic方法使用方法使用luffyzhaolaravelToolsTraitsResponseTraitSign签名插件引入请求参数签名验证配置Sign如果使用md5签名方法,请在config/app.php文件中添加sign_key配置如果您使用的是Rsa签名方式,请在config/app.php文件中添加app.sign_rsa_private_key和app.sign_rsa_public_key来配置配置中间件。在app/Http/Kernel.php文件中,你需要把'sign'=>luffyzhaolaravelToolsMiddlewareVerifySign::class,addedtothe$routeMiddlewarepropertyusing'sign:api'],function($route){Route::get('xxx','xxx');});签名方法rsa和md5参数排序准备参数添加时间戳字段然后按照字段名的ASCII码从小到大排序(字典顺序)生成url参数字符串拼接key和md5或rsa如下:{"name":“4sd65f4asd5f4as5df”,“aimncm”:“54854185”,“df4”:[“dfadsf”],“dfsd3”:{“a”:{“gfdfsg”:“56fdg”,“afdfsg”:“56fdg”}}}排序后:{"aimncm":"54854185","df4":["dfadsf"],"dfsd3":{"a":{"afdfsg":"56fdg","gfdfsg":"56fdg"}},"name":"4sd65f4asd5f4as5df","timestamp":"2018-05-2917:25:34"}生成URL参数串:aimncm=54854185&df4[0]=dfadsf&dfsd3a=56fdg&dfsd3a=56fdg&name=4sd65f4f2asd25f4amp5917:25:34拼接key:aimncm=54854185&df4[0]=dfadsf&dfsd3a=56fdg&dfsd3a=56fdg&name=4sd65f4asd5f4as5df×tamp=2018-05-2917:25:34base64:Z9I7IMHdO+T9qD3pS492GWNxNkzCxinuI+ih4xC4dWY=md5加密ddab78e7edfe56594e2776d892589a9credis-token认证插件介绍把Thetokenisstoredinredisandsupportsloginexpirationtimesetting,eventprocessingbeforeandafterlogin.配置Authguard在config/auth.php文件中,需要更新guards/driver为redis-token:'defaults'=>['guard'=>'api','passwords'=>'users',],...'guards'=>['api'=>['driver'=>'redis-token','provider'=>'users',],],如果你需要使用redis-token作为用户认证,我们需要对我们的用户模型做一个小的改动来实现一个接口。修改后的User模型如下:实现RedisTokeSubject{publicfunctiongetIdentifier(){return$this->getKey();}}登录/***登录*@methodstore*@paramStoreRequest$request**@return\Illuminate\Http\JsonResponse**@authorluffyzhao@vip.126.com*/publicfunctionstore(StoreRequest$request){$token=auth('api')->attempt($request->only(['phone','password']));if(!$token){return$this->respondWithError('用户不存在,或者密码错误!');}返回$this->respondWithToken((string)$token);}退出/***注销。**@methodlogout**@return\Illuminate\Http\JsonResponse**@authorluffyzhao@vip.126.com*/publicfunctionlogout(){auth('api')->logout();}return$this->respondWithSuccess([],'退出成功');}事件方法方法方法
