婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 如何在Laravel5.8中正確地應用Repository設計模式

如何在Laravel5.8中正確地應用Repository設計模式

熱門標簽:天潤融通外呼系統好嗎 高德地圖標注位置怎么標注 欣思維地圖標注 高德地圖標注店鋪收費嗎 杭州語音電銷機器人 江門回撥外呼系統 泊頭在哪里辦理400電話 電銷機器人沒有效果怎么樣 江西電銷機器人收費

在本文中,我會向你展示如何在 Laravel 中從頭開始實現 repository 設計模式。我將使用 Laravel 5.8.3 版,但 Laravel 版本不是最重要的。在開始寫代碼之前,你需要了解一些關于 repository 設計模式的相關信息。

repository 設計模式允許你使用對象,而不需要了解這些對象是如何持久化的。本質上,它是數據層的抽象。

這意味著你的業務邏輯不需要了解如何檢索數據或數據源是什么,業務邏輯依賴于 repository 來檢索正確的數據。

關于這個模式,我看到有人將它誤解為 repository 被用來創建或更新數據。 這不是 repository 應該做的,repository 不應該創建或更新數據,僅僅用于檢索數據。

理解透了吧?接下來一起寫代碼

既然我們從頭開始,那么我們先創建一個新的 Laravel 項目吧:

composer create-project --prefer-dist laravel/laravel repository

對于本教程,我們將構建一個小型的博客應用。現在我們已經創建好了一個新的 Laravel 項目,接下來應該為它創建一個控制器和模型。

php artisan make:controller BlogController

這將在 app/Http/Controllers 目錄中創建 BlogController 。

php artisan make:model Models/Blog -m

提示:

-m 選項會創建一個對應的數據庫遷移,你可以在 database/migrations 目錄中找到所生成的遷移。

現在你應該能在 app/Models 目錄中找到剛生成的模型 Blog 了吧。這只是一種我喜歡的存放模型的方式。

現在我們有了控制器和模型,是時候看看我們創建的遷移文件了。除了默認的 Laravel 時間戳字段外,我們的博客只需要 標題、內容 和 用戶 ID 字段。

?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateBlogsTable extends Migration
{
 public function up()
 {
  Schema::create('blogs', function (Blueprint $table) {
   $table->bigIncrements('id');
   $table->string('title');
   $table->text('content');
   $table->integer('user_id');
   $table->timestamps();

   $table->foreign('user_id')
     ->references('id')
     ->on('users');
  });
 }

 public function down()
 {
  Schema::dropIfExists('blogs');
 }
}

提示:

如果你使用的是 Laravel 5.8 以下的舊版本,請將

$table->bigIncrements('id');

替換為:

$table->increments('id');

設置數據庫

我將使用 MySQL 數據庫作為示例,第一步就是創建一個新的數據庫。

mysql -u root -p 
create database laravel_repository;

以上命令將會創建一個叫 laravel_repository 的新數據庫。接下來我們需要添加數據庫信息到 Laravel 根目錄的 .env 文件中。

DB_DATABASE=laravel_repository
DB_USERNAME=root
DB_PASSWORD=secret

當你更新了 .env 文件后我們需要清空緩存:

php artisan config:clear

運行遷移

現在我們已經設置好了數據庫,可以開始運行遷移了:

php artisan migrate

這將會創建 blogs 表,包含了我們在遷移中聲明的 title , content 和 user_id 字段。

實現 repository 設計模式

一切就緒,我們現在可以開始實現 repository 設計風格了。我們將會在 app 目錄中創建 Repositories 目錄。我們將要創建的第二個目錄是 Interfaces 目錄,這個目錄位于 Repositories 目錄中。

在 Interfaces 文件中我們將創建一個包含兩個方法的 BlogRepositoryInterface 接口。

  1. 返回所有博客文章的 all 方法
  2. 返回特定用戶所有博客文章的 getByUser 方法
?php

namespace App\Repositories\Interfaces;

use App\User;

interface BlogRepositoryInterface
{
 public function all();

 public function getByUser(User $user);
}

我們需要創建的最后一個類是將要實現 BlogRepositoryInterface 的 BlogRepository ,我們會寫一個最簡單的實現方式。

?php

namespace App\Repositories;

use App\Models\Blog;
use App\User;
use App\Repositories\Interfaces\BlogRepositoryInterface;

class BlogRepository implements BlogRepositoryInterface
{
 public function all()
 {
  return Blog::all();
 }

 public function getByUser(User $user)
 {
  return Blog::where('user_id'. $user->id)->get();
 }
}

你的 Repositories 目錄應該像這樣:

app/
└── Repositories/
 ├── BlogRepository.php
 └── Interfaces/
  └── BlogRepositoryInterface.php

你現在已經成功創建了一個 repository 了。但是我們還沒有完成,是時候開始使用我們的 repository 了。

在控制器中使用 Repository

要開始使用 BlogRepository ,我們首先需要將其注入到 BlogController 。由于 Laravel 的依賴注入,我們很容易用另一個來替換它。這就是我們控制器的樣子:

?php

namespace App\Http\Controllers;

use App\Repositories\Interfaces\BlogRepositoryInterface;
use App\User;

class BlogController extends Controller
{
 private $blogRepository;

 public function __construct(BlogRepositoryInterface $blogRepository)
 {
  $this->blogRepository = $blogRepository;
 }

 public function index()
 {
  $blogs = $this->blogRepository->all();

  return view('blog')->withBlogs($blogs);
 }

 public function detail($id)
 {
  $user = User::find($id);
  $blogs = $this->blogRepository->getByUser($user);

  return view('blog')->withBlogs($blogs);
 }
}

如你所見,控制器中的代碼很簡短,可讀性非常的高。不需要十行代碼就可以獲取到所需的數據,多虧了 repository ,所有這些邏輯都可以在一行代碼中完成。這對單元測試也很好,因為 repository 的方法很容易復用。

repository 設計模式也使更改數據源變得更加容易。在這個例子中,我們使用 MySQL 數據庫來檢索我們的博客內容。我們使用 Eloquent 來完成查詢數據庫操作。但是假設我們在某個網站上看到了一個很棒的博客 API,我們想使用這個 API 作為數據源,我們所要做的就是重寫 BlogRepository 來調用這個 API 替換 Eloquent 。

RepositoryServiceProvider

我們將注入 BlogController 中的 BlogRepository ,而不是注入 BlogController 中的 BlogRepositoryInterface ,然后讓服務容器決定將使用哪個存儲庫。這將在 AppServiceProvider 的 boot 方法中實現,但我更喜歡為此創建一個新的 provider 來保持整潔。

php artisan make:provider RepositoryServiceProvider

我們為此創建一個新的 provider 的原因是,當您的項目開始發展為大型項目時,結構會變得非常凌亂。設想一下,一個擁有 10 個以上模型的項目,每個模型都有自己的 repository ,你的 AppServiceProvider 可讀性將會大大降低。

我們的 RepositoryServiceProvider 會像下面這樣:

?php

namespace App\Providers;

use App\Repositories\BlogRepository;
use App\Repositories\Interfaces\BlogRepositoryInterface;
use Illuminate\Support\ServiceProvider;

class RepositoryServiceProvider extends ServiceProvider
{
 public function register()
 {
  $this->app->bind(
   BlogRepositoryInterface::class, 
   BlogRepository::class
  );
 }
}

留意用另一個 repository 替代 BlogRepository 是多么容易!

不要忘記添加 RepositoryServiceProvider 到 config/app.php 文件的 providers 列表中。完成了這些后我們需要清空緩存:

php artisan config:clear

就是這樣

現在你已經成功實現了 repository 設計模式,不是很難吧?

你可以選擇增加一些路由和視圖來拓展代碼,但本文將在這里結束,因為本文主要是介紹 repository 設計模式的。

原文地址:https://itnext.io/repository-design-pattern-done-right-in-laravel-d177b5fa75d4

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 詳解laravel passport OAuth2.0的4種模式
  • 關于laravel模板中生成URL的幾種模式總結
  • PHP觀察者模式示例【Laravel框架中有用到】
  • Laravel中服務提供者和門面模式的入門介紹

標簽:大同 深圳 石嘴山 內江 江門 駐馬店 平涼 雙鴨山

巨人網絡通訊聲明:本文標題《如何在Laravel5.8中正確地應用Repository設計模式》,本文關鍵詞  如,何在,Laravel5.8,中,正確地,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《如何在Laravel5.8中正確地應用Repository設計模式》相關的同類信息!
  • 本頁收集關于如何在Laravel5.8中正確地應用Repository設計模式的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲一区二区黄色| 色婷婷久久久综合中文字幕| 蜜桃久久久久久久| 免费在线视频一区| 香蕉成人伊视频在线观看| 亚洲综合在线第一页| 国产在线观看一区二区| 在线91免费看| 中文字幕亚洲一区二区av在线 | 亚洲午夜激情网页| 不卡的电视剧免费网站有什么| 欧美一级日韩免费不卡| 亚洲午夜电影网| 北条麻妃一区二区三区| 中文字幕免费不卡| 亚洲色图另类专区| 欧美影院一区二区三区| 亚洲美女精品一区| 欧美一级高清片| 国产成人日日夜夜| 亚洲视频在线一区观看| 91麻豆精品国产91久久久资源速度| 日韩精品电影一区亚洲| 国产日产欧美精品一区二区三区| 色综合天天综合狠狠| 国产一区二区精品久久99| 一区二区三区在线免费观看| 久久精品免视看| 欧美乱熟臀69xxxxxx| 成人性生交大片免费| 国产麻豆精品视频| 日韩精品欧美精品| 亚洲另类春色国产| 欧美国产日韩亚洲一区| 欧美日本国产视频| 色视频成人在线观看免| 99视频一区二区三区| 国产91对白在线观看九色| 久久精品国产久精国产| 偷偷要91色婷婷| 免费欧美在线视频| 麻豆国产精品官网| 男男视频亚洲欧美| 久久国产精品72免费观看| 婷婷成人激情在线网| 日韩电影在线观看一区| 日本中文一区二区三区| 日韩成人一区二区三区在线观看| 蜜臀av性久久久久av蜜臀妖精| 蜜臀av一区二区在线免费观看 | 欧美激情一区在线| 亚洲男女一区二区三区| 亚洲黄色免费网站| 久久精品久久精品| 在线亚洲+欧美+日本专区| 91麻豆精品国产91久久久 | 亚洲国产精品嫩草影院| 男人的天堂久久精品| 另类小说欧美激情| 成人av网站在线观看免费| 欧美精品xxxxbbbb| 中文字幕在线免费不卡| 亚洲综合一二区| 不卡的av中国片| 亚洲精品一区二区三区在线观看| 亚洲色图清纯唯美| 国产尤物一区二区| 91精品婷婷国产综合久久性色 | 91精品国产色综合久久不卡蜜臀 | www.66久久| 日韩久久精品一区| 午夜伊人狠狠久久| 欧美日本免费一区二区三区| 亚洲精品免费在线| 日本欧美一区二区在线观看| 国产成人精品1024| 欧美丝袜自拍制服另类| 欧美性生活大片视频| 久久成人久久鬼色| 国产精品久久久久久久久免费丝袜| 日韩一区二区在线看| 成人白浆超碰人人人人| 久久99热这里只有精品| 亚洲精品成人精品456| 精品国产一二三| 精品国产91九色蝌蚪| 久久亚洲一区二区三区明星换脸| 日本一区二区三区国色天香| 一区二区三区在线免费视频| 国产精品色婷婷久久58| www.欧美日韩| 国产一区久久久| 色综合天天在线| 精品久久免费看| 国产精品久久久久一区| 国产精品嫩草99a| 一本一道波多野结衣一区二区| 欧美亚一区二区| 2021久久国产精品不只是精品| 在线91免费看| 亚洲精品一区二区三区香蕉| 在线观看国产日韩| 欧美探花视频资源| 国产视频在线观看一区二区三区| 亚洲电影视频在线| 午夜精品久久久久久久久久久 | 久久久久久久久岛国免费| 国产精品女上位| 亚洲chinese男男1069| 成人深夜在线观看| 欧美嫩在线观看| 久久久午夜电影| 久久精品国内一区二区三区| 欧美日韩成人激情| 国产在线视频不卡二| 国产精品午夜在线| 91精品国产色综合久久ai换脸| 亚洲人成精品久久久久| 成人午夜视频在线| 国产一区二区三区免费看| 亚洲少妇屁股交4| 99riav久久精品riav| 亚洲成人一区二区| 国产精品免费视频网站| 26uuu色噜噜精品一区二区| 成人h版在线观看| 日韩午夜中文字幕| 色欧美日韩亚洲| 51久久夜色精品国产麻豆| 欧美日韩三级在线| 91啪在线观看| 日本不卡一二三| 亚洲一卡二卡三卡四卡无卡久久| 精品欧美久久久| 欧美精品在线一区二区三区| 91啪亚洲精品| 国产欧美一区二区三区鸳鸯浴| 国产成人精品免费网站| 欧美一区二区三区精品| 国产精品久久久久久久蜜臀| 国产精品一区三区| 久久久久久久久久久久久夜| 国产精品久久久久久久午夜片| 欧美精品一区二区三区久久久| 欧美韩日一区二区三区四区| 中文字幕亚洲成人| 国产在线精品不卡| 欧美三级视频在线| 国产色一区二区| 亚洲一区影音先锋| 色伊人久久综合中文字幕| 亚洲欧洲av色图| 久久99精品国产.久久久久久| 色呦呦国产精品| 国产精品狼人久久影院观看方式| 亚洲最色的网站| 欧美日韩国产在线播放网站| 亚洲国产精品av| 99精品视频在线观看免费| 日韩高清在线不卡| 一本色道a无线码一区v| 国产亚洲短视频| 国产69精品久久久久毛片| 久久九九影视网| 99精品久久99久久久久| 久久午夜色播影院免费高清| 国产精品一区二区久激情瑜伽| 91精品福利在线一区二区三区 | 色爱区综合激月婷婷| 正在播放亚洲一区| 亚洲黄色av一区| 欧美日韩一区二区三区在线看 | 日欧美一区二区| 亚洲国产成人私人影院tom| 国产中文字幕一区| 国产精品久久久久久久久晋中| 风间由美中文字幕在线看视频国产欧美| 久久综合成人精品亚洲另类欧美 | 精品久久人人做人人爽| 国产精品毛片高清在线完整版 | 国产精品无圣光一区二区| 成人av手机在线观看| 亚洲成av人综合在线观看| 777午夜精品免费视频| 久草精品在线观看| ●精品国产综合乱码久久久久 | 成人avav影音| 免费在线欧美视频| 成人免费在线视频| 国产午夜精品一区二区三区嫩草| 在线视频国产一区| 国产成人免费视频| 蜜桃av一区二区三区电影| 中文字幕一区二区三区乱码在线 | 日韩电影免费一区| 综合欧美一区二区三区| 日韩午夜精品视频| 欧美精品电影在线播放| 欧亚洲嫩模精品一区三区| 不卡一卡二卡三乱码免费网站|