目錄
首先我們需要在app
第二步創建對應的接口,其決定著我們的repository
現在我們可以創建我們repository
 
登入後複製
" >
 
登入後複製
DbHouseRepository.
6:最後使用依賴注入更新你的controller
首頁 後端開發 php教程 Laravel Repository 模式

Laravel Repository 模式

Jul 30, 2016 pm 01:30 PM
function public repository

Repository 模式

為了保持程式碼的整潔性和可讀性,使用Repository Pattern 是非常有用的。事實上,我們也不必僅僅為了使用這個特別的設計模式去使用Laravel,然而在下面的場景下,我們將使用OOP的框架Laravel 去展示如何使用repositories 使我們的 去展示如何使用

層不再那麼囉嗦、更解耦、易讀。下面讓我們更深入的研究一下。

不使用 repositories

其實使用Repositories並不是必要的,在你的應用中你完全可以不使用這個設計模式的前提下完成絕大多數的事情,然而隨著時間的推移你可能把自己陷入一個死角,例如不選擇使用Repositories
會使你的應用測試很不容易,(swapping out implementations)具體的實作將會變的很複雜,下面我們來看一個例子。 HousesController.php

<?php
    class HousesController extends BaseController {
        public function index()
        {
            $houses = House::all();
            return View::make('houses.index',compact('houses'));
        }    
        
        public function create()
        {
            return View::make('houses.create');
        }
        public function show($id)
        {
            $house = House::find($id);
            return View::make('houses.show',compact('house'));
        }
    }
登入後複製

這是一個很典型的一段程式碼使用Eloquent和資料庫交互,這段程式碼工作的很正常,但是將雜的。在此我們可以注入一個repository建立一個解耦類型的程式碼版本,這個解耦的版本程式碼可以讓後續程式的具體實作更加簡單。 使用 repositories

其實完成整個repository

模式需要相當多的步驟,但是一旦你完成幾次就會自然而然變成了一種習慣了,下面我們將詳細介紹每一步。

1.創建 Repository

 資料夾

首先我們需要在app

資料夾建立自己

Repository 資料夾repositories,然後要設定資料夾對應的每個檔案都必須設定對應的命名空間。 2: 創建對應的 Interface

第二步創建對應的接口,其決定著我們的repository

類必須要實現的相關方法,如下例所示,在此再次強調的是命名空間一定要記得加上。

HouseRepositoryInterface.php
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&lt;?php namespace App\Repositories; interface HouseRepositoryInterface { public function selectAll(); public function find($id); } </pre><div class="contentsignin">登入後複製</div></div>

3:創建對應的 

Repository

現在我們可以創建我們repository

現在我們可以創建我們repository
類來給我們做這個檔案多數的資料庫查詢都放進去,不論多麼複雜。如下面的例子DbHouseRepository.php

<?php namespace App\Repositories;

use House;

class DbHouseRepository implements HouseRepositoryInterface {
    
    public function selectAll()
    {
        return House::all();
    }

    public function find($id)
    {
        return House::find($id);
    }
}
登入後複製

<code><span><span> </span></span></code>
登入後複製

4:創建後端服務提供


首先你需要理解所謂服務提供,請參考手冊服務提供者

首先你需要理解所謂服務提供,請參考手冊服務提供者

🜎

當然你也可以新建一個資料夾主要放我們的

provider相關檔案。 上面一段程式碼主要說的是,當你在
controller層使用類型提示HouseRepositoryInterface,我們知道你將會使用DbHouseRepository.

5:更新你的
DbHouseRepository.
5:更新你的

。在程式碼中,我們已經實現了一個依賴注入,但如果我們要使用在此我們是需要手動去寫的,為了更為方面,我們需要增加這個providers 到app/config/app.php 中的 providers 數組裡面,只需要在最後加上AppRepositoriesBackendServiceProvider::class,

6:最後使用依賴注入更新你的controller

當我們完成上面的那些內容之後,我們在簡單的調用方法取代先前的複雜的資料庫調用,如下面內容:
HousesController.php

<?php namespace App\Repositories;

use IlluminateSupportSeriveProvider;

class BackSerivePrivider extends ServiceProvider {

    public function register()
    {
        $this->app->bind('App\Repositories\HouseRepositoryInterface', 'App\Repositories\DbHouseRepository');
    }
}
登入後複製

  這樣整個模式的轉換就完成了

以上就介紹了Laravel Repository 模式,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1325
25
PHP教程
1273
29
C# 教程
1252
24
function是什麼意思 function是什麼意思 Aug 04, 2023 am 10:33 AM

function是函數的意思,是一段具有特定功能的可重複使用的程式碼區塊,是程式的基本組成單元之一,可以接受輸入參數,執行特定的操作,並傳回結果,其目的是封裝一段可重複使用的程式碼,提高程式碼的可重複使用性和可維護性。

iOS的developer版和public版有什麼不同? iOS的developer版和public版有什麼不同? Mar 01, 2024 pm 12:55 PM

每年Apple發布新的iOS和macOS大版本之前,用戶都可以提前幾個月下載測試版搶先體驗一番。由於大眾和開發人員都使用該軟體,蘋果公司為兩者推出了developer和public版即開發者測試版的公共測試版。 iOS的developer版和public版有什麼差別呢?從字面上的意思來說,developer版是開發者測試版,public版是公共測試版。 developer版和public版面向的物件不同。 developer版是蘋果公司給開發者測試使用的,需要蘋果開發者帳號才能收到下載併升級,是

'enumerate()'函數在Python中的用途是什麼? 'enumerate()'函數在Python中的用途是什麼? Sep 01, 2023 am 11:29 AM

在本文中,我們將了解enumerate()函數以及Python中「enumerate()」函數的用途。什麼是enumerate()函數? Python的enumerate()函數接受資料集合作為參數並傳回一個枚舉物件。枚舉物件以鍵值對的形式傳回。 key是每個item對應的索引,value是items。語法enumerate(iterable,start)參數iterable-傳入的資料集合可以作為枚舉物件傳回,稱為iterablestart-顧名思義,枚舉物件的起始索引由start定義。如果我們忽

MySQL.proc表的作用與功能詳解 MySQL.proc表的作用與功能詳解 Mar 16, 2024 am 09:03 AM

MySQL.proc表的功能與功能詳解MySQL是一種流行的關係型資料庫管理系統,開發者在使用MySQL時常常會涉及到預存程序(StoredProcedure)的建立與管理。而MySQL.proc表則是一個非常重要的系統表,它儲存了資料庫中所有的預存程序的相關信息,包括預存程序的名稱、定義、參數等。在本文中,我們將詳細解釋MySQL.proc表的作用與功能

Vue.use函數的用法與作用 Vue.use函數的用法與作用 Jul 24, 2023 pm 06:09 PM

Vue.use函數的用法和作用Vue是一款流行的前端框架,它提供了許多有用的功能和功能。其中之一就是Vue.use函數,它可以讓我們在Vue應用中使用插件。本文將介紹Vue.use函數的用法和作用,並且提供一些程式碼範例。 Vue.use函數的基本用法非常簡單,只需在Vue實例化之前呼叫它,並傳入要使用的插件作為參數。以下是一個簡單的範例://引入並使用插件

在PHP中的clearstatcache()函數 在PHP中的clearstatcache()函數 Sep 07, 2023 am 09:33 AM

clearstatcache()函數用於清除檔案狀態快取。 PHP快取以下函數傳回的資訊−stat()lstat()file_exists()is_writable()is_readable()is_executable()is_file()is_dir()filegroup()fileowner()filesize()filetype()fileperms()這樣做是為了提供更好的性能。語法voidclearstatecache()參數NA傳回值clearstatcache(

在PHP中的file_exists()函數 在PHP中的file_exists()函數 Sep 14, 2023 am 08:29 AM

file_exists方法檢查檔案或目錄是否存在。它接受要檢查的檔案或目錄的路徑作為參數。以下是它的用途-當您需要在處理之前知道文件是否存在時,它非常有用。這樣,在建立新檔案時使用此函數即可知道該檔案是否已存在。語法file_exists($file_path)參數file_path-設定要檢查是否存在的檔案或目錄的路徑。必需。返回file_exists()方法返回。如果檔案或目錄存在,則傳回TrueFalse,如果檔案或目錄不存在範例讓我們看一個檢查「candidate.txt」檔案和即使文件

如何在PHP中使用SOA函數 如何在PHP中使用SOA函數 May 18, 2023 pm 01:10 PM

隨著網際網路的發展,SOA(服務導向的架構)成為了當今企業級系統中的重要的技術架構。 SOA架構中的服務可以重複使用、重組和擴展,同時也能夠簡化系統開發和維護的過程。 PHP作為一種被廣泛使用的Web程式語言,也提供了一些實作SOA的函數函式庫。接下來,我們將詳細介紹如何在PHP中使用SOA函數。一、SOA的基本概念SOA是分散式系統開發的思想與架構

See all articles