在Repository模式下使用laravel

5次阅读

共计 2612 个字符,预计需要花费 7 分钟才能阅读完成。

laravel-repository

仓库地址 Github

Repository 文档地址

清晰的目录结构

Models只负责定义模型(如: 模型关联,scope,get 和 set attribute 等)

Repository 负责处理这个表 相关的所有业务逻辑, 不只是注入 model, 相关的 redis 任何 cache 都可以注入, 代码定位迅速

Controllers 只负责处理简单的逻辑, 获取转发数据, 它应该是 简洁干净

  • App

    • Http

      • Controller

        • Admin

          • IndexController
          • UserController
          • ConfigController
      • Request(所有的 request 验证类)

        • Admin

          • Index

            • StoreRequest
            • UpdateRequest
            • DestroyRequest
          • User

          • Config

          • Request.php
    • Models (所有的 model 模型)

      • User(用户相关的所有模型)

        • User.php
        • UserExt.php
        • UserMessage.php
      • Config

        • Config.php
      • BaseModel.php
    • Repositories (目录结构应与 model 一致, 结构清晰)

      • User(用户相关的所有仓库)

        • UserRepository.php
        • UserExtRepository.php
        • UserMessageRepository.php

安装并使用

composer require littlebug/laravel-repository

mkdir app/Http/Requests

# 创建属于你自己的 Request 验证基类

# 就像下面这个文件

关于一键生成代码


# 在将命令注入到你的 laravel 项目以后

# 输入

php artisan list

# 如果你看到下面这些提示,那么可以开始快速生成代码了!~

 core
  core:controller               生成 Controller 
     {--table=}   指定表名称 [指定该参数会通过表生成视图文件]
     {--name=}    指定名称 可以带命名空间 [--name=Home/IndexController 或者 Home\\IndexController]
     {--r=}       指定 Repository 需要从 Repositories 目录开始; 默认使用控制器同名 Repository
     {--request=} 指定 request 目录; 需要从 Requests 目录开始; 默认使用控制器命名空间
     {--pk=}      指定主键名称,默认 id
  core:generate                 生成 controller|model|repository|request|views 
    {--table=}      指定表名称 [支持指定数据库, 例如:log.crontabs]
    {--path=}       指定目录 [没有传递绝对路径,否则使用相对对路径 从 app/Models 开始]  
    {--model=}      model 名称 默认生成使用表名称生成
  core:model 
# 让我们来试一下

# 在 commands 帮助文档的提示下生成代码

# 如果你的项目用到了数据库前缀,不要忘了去 database.php 中添加,否则会找不到 table

# 举个栗子, 以 member_message 表为例

php artisan core:generate --table=member_message --path=Member --controller=Member/MemberMessageController

# 在终端中你可以看到下面的结果

文件 [/Users/wanchao/www/lara-test/app/Models/Member/MemberMessage.php] 生成成功
文件 [/Users/wanchao/www/lara-test/app/Repositories/Member/MemberMessageRepository.php] 生成成功
文件 [/Users/wanchao/www/lara-test/app/Http/Requests/Member/MemberMessage/UpdateRequest.php] 生成成功
文件 [/Users/wanchao/www/lara-test/app/Http/Requests/Member/MemberMessage/DestroyRequest.php] 生成成功
文件 [/Users/wanchao/www/lara-test/app/Http/Requests/Member/MemberMessage/StoreRequest.php] 生成成功

# 添加路由 routes/web.php

Route::group(['namespace' => 'Member','prefix' => 'member'], function ($route) {$route->get('index', 'MemberController@indexAction');
    $route->get('message', 'MemberMessageController@indexAction');
});

### 修改 MemberMessageController
### 在 MemberMessageController 中 dd 打印数据

public function index()
{$filters = Helper::filter_array(request()->all());
    $filters['order'] = 'id desc';
    $list = $this->memberMessageRepository->paginate($filters);
    dd($list);
}

# 终端

php artisan serve

vist localhost:8001/member/message

# 你应该尝试一些你的数据库中存在的表,而不是机械的去复制粘贴我的栗子
 

自定义


# 也许你想自定义自己的 Repository

# 创建一个 Repository.php 在 app\Repository

# 对它进行扩展和部分重写, 比如 success 和 error 方法, 可以改为自己喜欢的数据格式

这种模式下开发, 项目结构异常清晰, Repository 的使用简洁到爆, 只需要花短短几分钟看一下他的使用说明, 你会喜欢上它的 ????

Repository 使用文档

感谢 seven 和 鑫鑫 贡献的代码 ????????

如果这个仓库帮助到了你,给我一个 star 来鼓励我~ ✨, 我会坚持继续维护这个仓库

正文完
 0