在Repository模式下使用laravel

栏目: PHP · 发布时间: 6年前

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模式下使用laravel

自定义

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

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

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

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

Repository使用文档

感谢 seven 和 鑫鑫 贡献的代码 :bouquet::rose:

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Mathematica Cookbook

Mathematica Cookbook

Sal Mangano / O'Reilly Media / 2009 / GBP 51.99

As the leading software application for symbolic mathematics, Mathematica is standard in many environments that rely on math, such as science, engineering, financial analysis, software development, an......一起来看看 《Mathematica Cookbook》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具