资讯专栏INFORMATION COLUMN

laravel 开发辅助工具

stormjun / 3313人阅读

摘要:按照最初提出者的介绍,是衔接数据映射层和领域层之间的一个纽带,作用相当于一个在内存中的域对象集合。客户端对象把查询的一些实体进行组合,并把它们提交给。同时支持登录过期时间设置,登录之前,登录之后事件处理。

laravel 开发辅助工具 配置 添加服务提供商

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

"providers" => [
  ...
  AppPluginsAuthProvidersLaravelServiceProvider::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(AppRepositoriesModulesUserProvider::class);
}
使用
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 UserIndexSearch

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

创建Search时,建议根据 ControllerActionSearch 的格式创建。
编写Search
 "=",
        "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
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)
Excels导出辅助插件 插件介绍

Excels导出辅助插件

创建 Excels
php artisan make:excel User

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

编写Search
id,
            $this->phone,
            $this->name
        ];
    }


    /**
     * 搜索参数
     * @return {[type]} [description]
     */
    protected function getAttributes()
    {
        return new ExcelSearch(request()->only([
            "phone",
            "name",
        ]));
    }


}
更多用法 请参考 maatwebsite/excel
Sql 写进日志-事件 介绍

把sql语句记录到日志里

使用

在 laravel 自带的 EventServiceProvider 类里 listen 添加

 "IlluminateDatabaseEvents" => [
    "luffyzhaolaravelToolsListenersQueryListeners"
 ]
生成事件
php artisan event:generate
Controller Traits 介绍

controller公用方法

使用方法

在 AppHttpControllersController 类中 use luffyzhaolaravelToolsTraitsResponseTrait

Sign 加签 插件介绍

请求参数加签验证

配置 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, 添加到$routeMiddleware属性中

使用
 "sign:api"],
    function($route){
        Route::get("xxx", "xxx");
    }
);
加签方式

rsamd5

参数排序

准备参数

添加 timestamp 字段

然后按照字段名的 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-29 17:25:34"
}

生成url参数串:

aimncm=54854185&df4[0]=dfadsf&dfsd3a=56fdg&dfsd3a=56fdg&name=4sd65f4asd5f4as5df×tamp=2018-05-29 17:25:34

拼接 key :

aimncm=54854185&df4[0]=dfadsf&dfsd3a=56fdg&dfsd3a=56fdg&name=4sd65f4asd5f4as5df×tamp=2018-05-29 17:25:34base64:Z9I7IMHdO+T9qD3pS492GWNxNkzCxinuI+ih4xC4dWY=

md5加密

ddab78e7edfe56594e2776d892589a9c
redis-token 认证 插件介绍

把token保存在redis。同时支持登录过期时间设置,登录之前,登录之后事件处理。

配置 Auth guard

在 config/auth.php 文件中,你需要将 guards/driver 更新为 redis-token:

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

...

"guards" => [
    "api" => [
        "driver" => "redis-token",
        "provider" => "users",
    ],
],
更改 Model

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

getKey();
    }
}
登录
  /**
       * 登录
       * @method store
       * @param StoreRequest $request
       *
       * @return IlluminateHttpJsonResponse
       *
       * @author luffyzhao@vip.126.com
       */
      public function store(StoreRequest $request)
      {
          $token = auth("api")->attempt(
              $request->only(["phone", "password"])
          );
          
          if (!$token) {
              return $this->respondWithError("用户不存在,或者密码不正确!");
          }
          
          return $this->respondWithToken((string) $token);
      }
退出
/**
     * 退出登录.
     *
     * @method logout
     *
     * @return IlluminateHttpJsonResponse
     *
     * @author luffyzhao@vip.126.com
     */
    public function logout()
    {
        auth("api")->logout();

        return $this->respondWithSuccess([], "退出成功");
    }
事件

方法

方法

方法

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29168.html

相关文章

  • 下载量最高 100 个 Laravel 扩展包推荐

    摘要:本文经授权转自社区,后续更新将以帖子内容和内容为准。说明另一个令人喜欢的地方,是拥有活跃的开发者社区,而活跃的开发者社区带来的,是繁华的扩展包生态。本文对上打了标签的扩展包进行整理,截止到现在年月号,有超过个扩展包,以下是下载量最大的个。 本文经授权转自 PHPHub 社区,后续更新将以 PHPHub 帖子内容 和 GitHub 内容 为准。 说明 Laravel 另一个令人喜欢的地方...

    Tychio 评论0 收藏0
  • Laravel框架的体系结构

    摘要:开发人员可以通过命令行工具生成和管理项目环境。附带了一个名为的优秀的命令行工具它提供了一些开发过程中有用的命令用,可以用来生成框架代码和数据库管理。这就是的目录结构发挥作用的地方。 Laravel被称为全栈式框架,因为它能够处理从网络服务到数据库管理、HTML生成的一切事情,垂直集成的web开发环境给开发者提供了更好的体验。 开发人员可以通过命令行工具,生成和管理Laravel项目环...

    ACb0y 评论0 收藏0
  • laravel package收集

    摘要:查找保存下载用搭建自己的缓存仓库权限管理的好选择基于封装的后台管理系统,支持手机和端访问支付宝风格的验证器后台系统微信接口的部署脚本开发的博客系统百度推送自动记录用户行为扩展一个项目管理系统根据生成对应导航的状态 1.debug https://github.com/barryvdh/l... showImg(https://segmentfault.com/img/bVmhWL); ...

    psychola 评论0 收藏0
  • laravel框架应用和composer扩展包开发

    摘要:官方地址是目前最流行的框架,发展势头迅猛,应用非常广泛,有丰富的扩展包可以应付你能想到的各种应用场景,框架思想前卫,跟随时代潮流,提倡优雅代码,自称为工匠,其中的模板引擎容器以及扩展包为业务的开发提供了极大的便利。 laravel5.5+ laravel官方地址 laravel是目前最流行的php框架,发展势头迅猛,应用非常广泛,有丰富的扩展包可以应付你能想到的各种应用场景,lara...

    shevy 评论0 收藏0
  • PHP / Laravel API 开发推荐阅读清单

    showImg(https://segmentfault.com/img/bV6aHV?w=1280&h=800); 社区优秀文章 Laravel 5.5+passport 放弃 dingo 开发 API 实战,让 API 开发更省心 - 自造车轮。 API 文档神器 Swagger 介绍及在 PHP 项目中使用 - API 文档撰写方案 推荐 Laravel API 项目必须使用的 8 个...

    shmily 评论0 收藏0
  • [译] 使用 PHPStorm 开发 Laravel 应用

    摘要:很多程序员使用创建他们的应用程序。是一个免费开源的应用程序框架。是的模板语言,对艺术家友好,这个程序员的命令行工具可以在中工作使用插件和帮助器我们可以进一步扩展对应用的支持。 很多PHP程序员使用 [laravel] 创建他们的应用程序。[laravel] 是一个免费开源的PHP web应用程序框架。它基于多个Symfony 组件,提供了一个开发框架,包括authentication,...

    buildupchao 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<