资讯专栏INFORMATION COLUMN

在Repository模式下使用laravel

netScorpion / 2196人阅读

摘要:仓库地址文档地址清晰的目录结构只负责定义模型如模型关联和等负责处理这个表相关的所有业务逻辑不只是注入相关的任何都可以注入代码定位迅速只负责处理简单的逻辑获取转发数据它应该是简洁干净的所有的验证类所有的模型用户相关的所有模型目录结构应与一致

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 或者 HomeIndexController ]
     {--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 在 appRepository

# 对它进行扩展和部分重写,比如success 和error 方法, 可以改为自己喜欢的数据格式
这种模式下开发, 项目结构异常清晰, Repository的使用简洁到爆, 只需要花短短几分钟看一下他的使用说明,你会喜欢上它的

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

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

相关文章

  • Laravel 中设计模式的实战分享

    摘要:如何在实战中能应用上设计模式,我思考了接近两年。最开始我接触设计模式,出发点就是为了重构代码,以便更好的复用和测试。也就是说基本是被当成一组静态函数使用的。 MVC是Laravel自带的,大家也多少都会用一些。今天我们不谈MVC,谈一些大中型项目的设计思路。 前言 虽然标题说是设计模式,但是我并不打算去讲什么singleton、strategy、factory,不知道为什么,每次看到...

    李义 评论0 收藏0
  • 推荐:好用的 Laravel Repository

    摘要:但在中也不可避免的基础模式,上述问题仍然存在。这样可以完全分离和的依赖。最开始在中使用是通过定义大量的来注入,,实现具体的工作类。但是像链接调用仍然没有解决,为些我们开发出了新的仓库包。目前此包已经使用在好几个项目中目前运行良好。 什么是Repository模式,如何使用Repository模式 这里就不再啰嗦了,请参见以下几个链接如何使用 Repository 模式?关于 Repos...

    MAX_zuo 评论0 收藏0
  • LaravelRepository Pattern(仓库模式)——概念篇

    摘要:确实,要独立一个操作层出来,确实会增加大量代码,非常繁琐。如果你是小项目,未必需要使用这一模式。但如果是年以上的复杂大型项目,这种模式的好处就比较明显了。如果你是纯新手,建议你暂时不要往下看,先把用得比较熟练后再回来学习。 为什么要学习Repository Pattern(仓库模式) Repository 模式主要思想是建立一个数据操作代理层,把controller里的数据操作剥离出来...

    tomener 评论0 收藏0
  • laravel 开发辅助工具

    摘要:按照最初提出者的介绍,是衔接数据映射层和领域层之间的一个纽带,作用相当于一个在内存中的域对象集合。客户端对象把查询的一些实体进行组合,并把它们提交给。同时支持登录过期时间设置,登录之前,登录之后事件处理。 laravel 开发辅助工具 配置 添加服务提供商 将下面这行添加至 config/app.php 文件 providers 数组中: providers => [ ... ...

    stormjun 评论0 收藏0
  • 为什么你应该使用 Repository

    摘要:原文来自模式为了保持代码的整洁性和可读性,使用是非常有用的。这是一个很典型的一段代码使用和数据库交互,这段代码工作的很正常,但是层对于而言将是紧耦合的。 原文来自http://vegibit.com/laravel-repository-pattern/ Repository 模式 为了保持代码的整洁性和可读性,使用Repository Pattern 是非常有用的。事实上,我们也不必...

    Simon 评论0 收藏0

发表评论

0条评论

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