Inhaltsverzeichnis
Laravel Repository 模式,laravelrepository
Repository 模式
使用 repositories
1.创建 Repository 文件夹
2: 创建相应的 Interface
3:创建对应的 Repository
4:创建后端服务提供
5:更新你的Providers Array
6:最后使用依赖注入更新你的controller
Heim php教程 php手册 Laravel Repository 模式,laravelrepository

Laravel Repository 模式,laravelrepository

Jun 13, 2016 am 08:55 AM
sql语句

Laravel Repository 模式,laravelrepository

Repository 模式

为了保持代码的整洁性和可读性,使用Repository Pattern 是非常有用的。事实上,我们也不必仅仅为了使用这个特别的设计模式去使用Laravel,然而在下面的场景下,我们将使用OOP的框架Laravel 去展示如何使用repositories 使我们的Controller层不再那么啰嗦、更加解耦和易读。下面让我们更深入的研究一下。

不使用 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'));
        }
    }
Nach dem Login kopieren

  

这是一个很典型的一段代码使用Eloquent和数据库交互,这段代码工作的很正常,但是controller层对于Eloquent而言将是紧耦合的。在此我们可以注入一个repository创建一个解耦类型的代码版本,这个解耦的版本代码可以使后续程序的具体实现更加简单。

使用 repositories

其实完成整个repository模式需要相当多的步骤,但是一旦你完成几次就会自然而然变成了一种习惯了,下面我们将详细介绍每一步。

1.创建 Repository 文件夹

首先我们需要在app文件夹创建自己Repository 文件夹repositories,然后文件夹的每一个文件都要设置相应的命名空间。

2: 创建相应的 Interface

第二步创建对应的接口,其决定着我们的repository类必须要实现的相关方法,如下例所示,在此再次强调的是命名空间一定要记得加上。
HouseRepositoryInterface.php

<?php namespace App\Repositories;

interface HouseRepositoryInterface {
    public function selectAll();
    
    public function find($id);
}
Nach dem Login kopieren

  

3:创建对应的 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);
    }
}
Nach dem Login kopieren

  

<code><span class="php"><span class="hljs-preprocessor"> </span></span></code>
Nach dem Login kopieren
Nach dem Login kopieren

4:创建后端服务提供

首先你需要理解所谓服务提供,请参考手册服务提供者
BackendServiceProvider.php

<?php namespace App\Repositories;

use IlluminateSupportSeriveProvider;

class BackSerivePrivider extends ServiceProvider {

    public function register()
    {
        $this->app->bind('App\Repositories\HouseRepositoryInterface', 'App\Repositories\DbHouseRepository');
    }
}
Nach dem Login kopieren

  

<code><span class="php"><span class="hljs-preprocessor"> </span></span></code>
Nach dem Login kopieren
Nach dem Login kopieren

当然你也可以新建一个文件夹主要放我们的provider相关文件。
上面一段代码主要说的是,当你在controller层使用类型提示HouseRepositoryInterface,我们知道你将会使用DbHouseRepository.

5:更新你的Providers Array

其实在上面的代码中,我们已经实现了一个依赖注入,但如果我们要使用在此我们是需要手动去写的,为了更为方面,我们需要增加这个providers 到app/config/app.php 中的 providers数组里面,只需要在最后加上App\Repositories\BackendServiceProvider::class,

6:最后使用依赖注入更新你的controller

当我们完成上面的那些内容之后,我们在Controller只需要简单的调用方法代替之前的复杂的数据库调用,如下面内容:
HousesController.php

<?php 

use App\repositories\HouseRepositoryInterface;

class HousesController extends BaseController {
    protected $house;
    
    public function __construct(HouseRepositoryInterface $house)
    {
        $this->house = $house;
    }


    public function index()
    {
        $houses = $this->house->selectAll();

        return View::make('houses.index', compact('houses'));
        
    }


    public function create()
    {
        return View::make('houses.create');
    }


    public function show($id)
    {
        $house = $this->house->find($id);
        
        return View::make('houses.show', compact('house'));

    }
}
Nach dem Login kopieren

  

  这样 整个模式的转换就完成了

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verwenden Sie EXPLAIN in Oracle So verwenden Sie EXPLAIN in Oracle May 03, 2024 am 12:06 AM

Der EXPLAIN-Befehl in Oracle wird verwendet, um den Ausführungsplan einer SQL-Anweisung zu analysieren. Die Verwendungsmethode besteht darin, das Schlüsselwort EXPLAIN vor der SQL-Anweisung hinzuzufügen. EXPLAIN-Ergebnisse enthalten Informationen wie ID, Operatortyp, Schätzung der Zeilenanzahl, Kostenschätzung, Schätzung der Ausgabezeilenanzahl, Zugriffsprädikate und Filterprädikate, die zur Optimierung der Abfrageleistung, zur Identifizierung kostspieliger Operatoren und Tabellen verwendet werden können, die von der Optimierung profitieren können Techniken.

Was stellt ein Zeichen in SQL dar? Was stellt ein Zeichen in SQL dar? May 02, 2024 am 03:51 AM

Zeichen in SQL werden in einfache Anführungszeichen gesetzt, z. B. „A“. Zeichenfolgen werden in doppelte Anführungszeichen gesetzt und Zeichen und Zeichenfolgen sind unterschiedliche Typen. In einfache Anführungszeichen eingeschlossene Zeichen werden unverändert gespeichert und in doppelte Anführungszeichen eingeschlossene Zeichenfolgen können Escape-Sequenzen enthalten. Das einfache Anführungszeichen selbst kann mit einer Escape-Sequenz wie „\“ gespeichert werden.

Wie kann ich die Summe von zwei Datenspalten gleichzeitig in ThinkPhp6 abfragen? Wie kann ich die Summe von zwei Datenspalten gleichzeitig in ThinkPhp6 abfragen? Apr 01, 2025 pm 02:54 PM

ThinkPhp6 -Datenbankabfrage: So verwenden Sie TP6 zum Implementieren von SQL -Anweisungen SelectSum (JIN), Summe (CHU) aus SYSDBUIL in ThinkPhp6 Framework, So verwenden Sie SQL -Anweisung Auswählen ...

Wie sortieren Sie die Produktliste durch Ziehen und stellen Sie sicher, dass der Spread effektiv ist? Wie sortieren Sie die Produktliste durch Ziehen und stellen Sie sicher, dass der Spread effektiv ist? Apr 02, 2025 pm 01:00 PM

So implementieren Sie die Produktlistensortierung durch Ziehen. Wenn wir uns mit der Sortierung von Front-End-Produktlisten befassen, stehen wir vor einem interessanten Bedarf: Benutzer tun dies, indem wir Produkte ziehen ...

Was bedeutet Ansicht in SQL? Was bedeutet Ansicht in SQL? May 01, 2024 pm 11:36 PM

Eine Ansicht in SQL ist eine virtuelle Tabelle, die durch Abfragen einer Basistabelle generiert wird und keine Daten speichert. Sie bietet die Vorteile der Datenabstraktion, Sicherheitskontrolle, Leistungsoptimierung und logischen Organisation. Ansichten werden über die CREATE VIEW-Anweisung erstellt und Vorgänge wie Abfragen, Aktualisieren und Löschen können verwendet werden, Aktualisierungen der Ansicht wirken sich jedoch auf deren Basistabelle aus. Die Hauptunterschiede zwischen Ansichten und Tabellen sind Datenspeicherung (virtuell vs. real), Leistung (Ansichten sind im Allgemeinen schneller), Aktualisierungsauswirkungen (Ansichten wirken sich auf Basistabellen aus, Tabellen nicht) und Flexibilität (Ansichten können Abfragen jederzeit ändern, während Tabellenschema schwer zu ändern).

Wie sortieren Sie die Produktliste und unterstützen Sie die Verbreitungsvorgänge durch Ziehen? Wie sortieren Sie die Produktliste und unterstützen Sie die Verbreitungsvorgänge durch Ziehen? Apr 02, 2025 pm 01:12 PM

Wie sortiere ich die Produktliste durch Ziehen? Wenn Sie sich mit E-Commerce-Plattformen oder ähnlichen Anwendungen befassen, müssen Sie häufig die Produktliste sortieren ...

Golang-Funktionen optimieren den Datenbankbetrieb von Webanwendungen Golang-Funktionen optimieren den Datenbankbetrieb von Webanwendungen May 02, 2024 am 08:00 AM

Optimieren Sie den Datenbankbetrieb von Webanwendungen: Verbindungspooling: Datenbankverbindungen wiederverwenden und den Aufwand für das Erstellen und Zerstören von Verbindungen reduzieren. Vorkompilierte Abfragen: Vermeiden Sie die Neukompilierung von SQL-Anweisungen bei jeder Abfrage, wodurch die Abfrageeffizienz verbessert wird. Transaktion: Stellen Sie die ACID-Eigenschaften von Datenbankoperationen sicher, um Atomizität, Konsistenz, Isolation und Haltbarkeit zu erreichen.

See all articles