在Repository模式下使用laravel

laravel-repository

倉庫地址Githubphp

Repository文檔地址laravel

清晰的目錄結構

Models只負責定義模型(如:模型關聯,scope,get和set attribute等)

Repository負責處理這個表相關的全部業務邏輯, 不僅是注入model, 相關的redis任何cache均可以注入,代碼定位迅速

Controllers 只負責處理簡單的邏輯,獲取轉發數據,它應該是 簡潔乾淨

  • App

    • Http

      • Controller

        • Admingit

          • IndexController
          • UserController
          • ConfigController
          • ...
      • Request(全部的request驗證類)

        • Admingithub

          • Indexweb

            • StoreRequest
            • UpdateRequest
            • DestroyRequest
          • Userredis

            • ...
          • 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

# 你應該嘗試一些你的數據庫中存在的表,而不是機械的去複製粘貼個人栗子

clipboard.png

自定義

# 也許你想自定義本身的Repository

# 建立一個 Repository.php 在 app\Repository

# 對它進行擴展和部分重寫,好比success 和error 方法, 能夠改成本身喜歡的數據格式

這種模式下開發, 項目結構異常清晰, Repository的使用簡潔到爆, 只須要花短短几分鐘看一下他的使用說明,你會喜歡上它的 😸

Repository使用文檔bash

感謝 seven 和 鑫鑫 貢獻的代碼 💐🌹

若是這個倉庫幫助到了你,給我一個star來鼓勵我~ ✨,我會堅持繼續維護這個倉庫

相關文章
相關標籤/搜索