laravel 开发辅助工具

配置

添加服务提供商

将下面这行添加至 config/app.php 文件 providers 数组中:

'providers' => [...App\Plugins\Auth\Providers\LaravelServiceProvider::class]

插件及文档

  • redisToken认证
  • Repository 模式
  • 表单搜索辅助插件
  • Excels导出辅助插件
  • Sign 加签
  • Sql 写进日志-事件
  • Controller Traits

Repository 模式

插件介绍

首先需要声明的是设计模式和使用的框架以及语言是无关的,关键是要理解设计模式背后的原则,这样才能不管你用的是什么技术,都能够在实践中实现相应的设计模式。

按照最初提出者的介绍,Repository 是衔接数据映射层和领域层之间的一个纽带,作用相当于一个在内存中的域对象集合。客户端对象把查询的一些实体进行组合,并把它 们提交给 Repository。对象能够从 Repository 中移除或者添加,就好比这些对象在一个 Collection 对象上进行数据操作,同时映射层的代码会对应的从数据库中取出相应的数据。

从概念上讲,Repository 是把一个数据存储区的数据给封装成对象的集合并提供了对这些集合的操作。

Repository 模式将业务逻辑和数据访问分离开,两者之间通过 Repository 接口进行通信,通俗点说,可以把 Repository 看做仓库管理员,我们要从仓库取东西(业务逻辑),只需要找管理员要就是了(Repository),不需要自己去找(数据访问),具体流程如下图所示:

创建 Repository

不使用缓存


php artisan make:repo User

使用缓存

php artisan make:repo User --cache

创建 UserRepository 时会询问是否创建Model ,如果Model以存在,需要把 AppRepositoriesModulesUserProvider::class 的Model替换成当前使用的Model

配置Providers

将下面这行添加至 AppProvidersAppServiceProvider::class 文件 register 方法中:

public function register()
{$this->app->register(\App\Repositories\Modules\User\Provider::class);
}

使用

<?php
namespace App\Http\Controllers;use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Repositories\Modules\User\Interfaces;class HomeController extends Controller
{protected $repo = null;public function __construct(Interfaces $repo){$this->repo = $repo;}public function index(Request $request){return $this->respondWithSuccess($this->repo->get(['*']));}
}

配合 Search 更灵活

public function index(Request $request){return $this->respondWithSuccess($this->repo->getwhere(new IndexSearch($request->olny(['name'])) ,['*']));}

方法

参考 Repository 方法

表单搜索辅助插件

插件介绍

把表单提交的一些参数传换成 where 语句.

创建 Search

生成一个UserController::index控制器使用的搜索辅助类


php artisan make:search User\IndexSearch

上面命令会创建一个 AppSearchsModulesUserIndexSearch::class 的类

创建Search时,建议根据 ControllerActionSearch 的格式创建。

编写Search

<?phpnamespace App\Searchs\Modules\User;use luffyzhao\laravelTools\Searchs\Facades\SearchAbstract;class IndexSearch extends SearchAbstract
{protected $relationship = ['phone' => '=','name'  => 'like','date' => 'between'];public function getNameAttribute($value){return $value . '%';}public function getDateAttribute($value){return function ($query){$query->where('date', '>', '2018-05-05')->where('status', 1);};}
}

使用Search

<?php
namespace App\Http\Controllers;use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Repositories\Modules\User\Interfaces;
use App\Searchs\Modules\User\IndexSearch;class HomeController extends Controller
{protected $repo = null;public function __construct(Interfaces $repo){$this->repo = $repo;}public function index(Request $request){return $this->respondWithSuccess($this->repo->getWhere(new IndexSearch($request->only(['phone', 'name', 'date'])), ['*']));}
}

生成的sql

请求参数:


phone=18565215214&name=成龙&date=2018-08-21

生成的sql

WHERE (phone = 18565215214) AND (name like '成龙%') AND (date > '2018-05-05' AND status = 1)


<h2>Excels导出辅助插件</h2>
<h3>插件介绍</h3>
<p>Excels导出辅助插件</p>
<h3>创建 Excels</h3>

php artisan make:excel User


<p>上面命令会创建一个 AppExcelsModulesUserExcel::class 的类</p>
<h3>编写Search</h3>

<?php
namespace App\Excels\Modules;

use App\Excels\Facades\ExcelAbstract;
use App\Repositories\Modules\User\Interfaces;
use App\Searchs\Modules\User\ExcelSearch;

class CarExcel extends ExcelAbstract
{

public function __construct(Interfaces $repo)
{parent::__construct($repo);
}/*** Excel标题列* @return {[type]} [description]*/
public function headings()
{return ['ID','手机号码','姓名'];
}/*** @param mixed $row** @return array*/
public function map($row)
{return [$row-&gt;id,$this-&gt;phone,$this-&gt;name];
}/*** 搜索参数* @return {[type]} [description]*/
protected function getAttributes()
{return new ExcelSearch(request()-&gt;only(['phone','name',]));
}

}


<blockquote>更多用法 请参考 <a href="https://github.com/Maatwebsite/Laravel-Excel" rel="nofollow noreferrer">maatwebsite/excel</a>
</blockquote>
<h2>Sql 写进日志-事件</h2>
<h3>介绍</h3>
<p>把sql语句记录到日志里</p>
<h3>使用</h3>
<p>在 laravel 自带的 EventServiceProvider 类里 listen 添加</p>

'Illuminate\Database\Events' => [
'luffyzhao\laravelTools\Listeners\QueryListeners'
]


<h3>生成事件</h3>

php artisan event:generate


<h2>Controller Traits</h2>
<h3>介绍</h3>
<p>controller公用方法</p>
<h3>使用方法</h3>
<p>在 AppHttpControllersController 类中 use luffyzhaolaravelToolsTraitsResponseTrait</p>
<h2>Sign 加签</h2>
<h3>插件介绍</h3>
<p>请求参数加签验证</p>
<h3>配置 Sign</h3>
<p>如果你使用的是md5加签方式请在config/app.php文件中,添加 sign_key 配置。如果你使用的是Rsa加签方式请在config/app.php文件中,添加app.sign_rsa_private_key和app.sign_rsa_public_key配置</p>
<h3>配置中间件</h3>
<p>在app/Http/Kernel.php文件中,您需要把 'sign' =&gt; luffyzhaolaravelToolsMiddlewareVerifySign::class, 添加到$routeMiddleware属性中</p>
<h3>使用</h3>

<?php

Route::group(
['middleware' => 'sign:api'],
function($route){
Route::get('xxx', 'xxx');
}
);


<h5>加签方式</h5>
<p><code>rsa</code> 和 <code>md5</code></p>
<h5>参数排序</h5>
<ul>
<li>准备参数</li>
<li>添加 <code>timestamp</code> 字段</li>
<li>然后按照字段名的 ASCII 码从小到大排序(字典序)</li>
<li>生成 <code>url</code> 参数串</li>
<li>拼接 key 然后 md5 或者 rsa</li>
</ul>
<p>如下所示:</p>

{
"name": "4sd65f4asd5f4as5df",
"aimncm": "54854185",
"df4": ["dfadsf"],
"dfsd3": {
"a": {
"gfdfsg": "56fdg",
"afdfsg": "56fdg"
}
}
}


<p>排序后:</p>

{
"aimncm": "54854185",
"df4": ["dfadsf"],
"dfsd3": {
"a": {
"afdfsg": "56fdg",
"gfdfsg": "56fdg"
}
},
"name": "4sd65f4asd5f4as5df",
"timestamp": "2018-05-29 17:25:34"
}


<p>生成url参数串:</p>
<blockquote>aimncm=54854185&amp;df4[0]=dfadsf&amp;dfsd3a=56fdg&amp;dfsd3a=56fdg&amp;name=4sd65f4asd5f4as5df&amp;timestamp=2018-05-29 17:25:34</blockquote>
<p>拼接 key :</p>
<blockquote>aimncm=54854185&amp;df4[0]=dfadsf&amp;dfsd3a=56fdg&amp;dfsd3a=56fdg&amp;name=4sd65f4asd5f4as5df&amp;timestamp=2018-05-29 17:25:34base64:Z9I7IMHdO+T9qD3pS492GWNxNkzCxinuI+ih4xC4dWY=</blockquote>
<p>md5加密</p>
<blockquote>ddab78e7edfe56594e2776d892589a9c</blockquote>
<h1>redis-token 认证</h1>
<h3>插件介绍</h3>
<p>把token保存在redis。同时支持登录过期时间设置,登录之前,登录之后事件处理。</p>
<h3>配置 Auth guard</h3>
<p>在 config/auth.php 文件中,你需要将 guards/driver 更新为 redis-token:</p>

'defaults' => [
'guard' => 'api',
'passwords' => 'users',],

...

'guards' => [
'api' => [
'driver' => 'redis-token',
'provider' => 'users',
],],


<h3>更改 Model</h3>
<p>如果需要使用 redis-token 作为用户认证,我们需要对我们的 User 模型进行一点小小的改变,实现一个接口,变更后的 User 模型如下:</p>

<?php

namespace App\Model;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
use luffyzhao\laravelTools\Auths\Redis\RedisTokeSubject;

class User extends Authenticatable implements RedisTokeSubject
{
public function getIdentifier(){
return $this->getKey();
}
}


<h3>登录</h3>

/**
* 登录
* @method store
* @param StoreRequest $request

@return \Illuminate\Http\JsonResponse

@author luffyzhao@vip.126.com
*/
public function store(StoreRequest $request)
{
$token = auth('api')->attempt(
$request->only(['phone', 'password'])
);

      if (!$token) {return $this-&gt;respondWithError('用户不存在,或者密码不正确!');}return $this-&gt;respondWithToken((string) $token);}

<h3>退出</h3>

/**
* 退出登录.

@method logout

@return \Illuminate\Http\JsonResponse

@author luffyzhao@vip.126.com
*/
public function logout()
{
auth('api')->logout();

    return $this-&gt;respondWithSuccess([], '退出成功');
}

```

事件

  • 方法

方法

  • 方法

原文地址:https://segmentfault.com/a/1190000015903727

转载于:https://www.cnblogs.com/lalalagq/p/9975333.html

laravel 开发辅助工具相关推荐

  1. Shellcode开发辅助工具shellnoob

    Shellcode开发辅助工具shellnoob Shellcode开发的过程中会遇到很多繁杂的工作,如编译.反编译.调试等.为了减少这部分工作,Kali Linux提供了开发辅助工具shellnoo ...

  2. Draft-微软出品的云原生下的本地开发辅助工具

    一.介绍 Draft是微软Deis团队开源的一个用Go语言编写的容器应用开发辅助工具,用于帮助开发人员简化容器应用程序构建和部署的开发流程.Draft的设计思路在于,允许开发人员在不了Docker和K ...

  3. 开发辅助工具Kalman Studio2.0发布,内置基于T4的代码生成器

    最初开发该软件的目标是做成一个开发辅助工具来提高工作效率,代码生成器只是作为其中的一个功能,以前发布过该软件的一个粗糙的版本,bug有不少,现在系统的整理了一下,修改了不少bug,这次最大的改动就是将 ...

  4. html5 css3在线工具,HTML5/CSS3开发辅助工具(TopStyle)

    TopStyle 是一款 CSS 开发辅助工具,即 HTML5 / CSS3 编辑器,它专注于 HTML CSS 设计辅助,提供比较多的功能,如 CSS 代码检查等,据称 TopStyle 的帮助文件 ...

  5. Java服务端和客户端开发辅助工具Utils

    包括了各种工具类.辅助类.管理类等 Awesome_API: https://github.com/marktony/Awesome_API/blob/master/Chinese.md 收集中国国内 ...

  6. Android开发辅助工具类 Utils

    包括了各种工具类.辅助类.管理类等    都可以 在Git  里找到代码 来研究,深入 Awesome_API: https://github.com/marktony/Awesome_API/blo ...

  7. Android开发辅助工具类 Utils 汇总

    包括了各种工具类.辅助类.管理类等 Awesome_API: https://github.com/marktony/Awesome_API/blob/master/Chinese.md 收集中国国内 ...

  8. 11个程序员必备简捷开发辅助工具

    程序员必备简捷开发辅助工具总结 写在前面: 工欲善其事必先利其器,拥有简捷的开发辅助工具能大大提高我们程序猿的开发效率.Melo刚到学校就给大家总结了一些常用的辅助开发的工具,希望大家能喜欢,闲话不多 ...

  9. 4类程序员直呼好用的嵌入式开发辅助工具

    俗话说工欲善其事必先利其器.有了好的开发辅助工具的开发人员就像开了外挂,事半功倍. 下面将会按照不同功能给大家介绍几种身边程序员们力荐好用的开发辅助工具 一.常见硬件芯片 想要开发一款嵌入式产品,首先 ...

最新文章

  1. Android DrawLayout + ListView 的使用(一)
  2. Windows 7平台安装Oracle Client 10g版本时需要做的一点变更
  3. Android开发之百度地图经纬度转换地址(以及获取详细地址的方法自测成功)
  4. 第5章 Python 数字图像处理(DIP) - 图像复原与重建7 - 周期噪声 余弦噪声生成方法
  5. mysql变量 exec_MySQL slave_exec_mode 参数说明
  6. 2019年总结人工智能未来发展趋势
  7. 《用户网络行为画像》读书笔记(二)
  8. RAD与non-RAD
  9. nginx的虚拟用户以及负载均衡
  10. 游戏开发筑基之特殊输入函数的妙用(C语言)
  11. python加载dll文件_python引用DLL文件的方法
  12. 在html用vue组件,html页面引入vue组件
  13. 利用 David Lowe 的sift源码实现遗留物检测
  14. SystemUI KeyguardBouncer的加载
  15. 百度云推送-服务端 C# SDK
  16. AtCoder Beginner Contest 182----E. Akari
  17. 【愚公系列】华为云系列之ModelArts+AppCube带你识别101种西式美食【我的低代码AI体验】
  18. matlab输出的图怎么设置网格背景图片,4.11Python数据处理篇之Matplotlib系列(十一)---图例,网格,背景的设置...
  19. BFS(宽度优先搜索、广度优先搜索)
  20. 需要知道的华为、锐捷、H3C交换机命令

热门文章

  1. 寒假算法训练1-J(分棍子,求最长棍子的数量,另外学习map的排序方法)
  2. python中串口通信的步骤及实现
  3. 三七互娱-游戏运维岗笔试题(无答案)
  4. JTable深入浅出
  5. 语雀、在线文档与知识库的陈年往事
  6. IPD(集成产品开发)
  7. 浙江省职称评审申报收费标准
  8. python中slice是什么类型,python中slice是什么类型_在python中,slice是一个副本还是一个poin...
  9. Pipe Comet
  10. NBA赛事直播超清画质背后:阿里云视频云「窄带高清2.0」技术深度解读