Laravel-Repository-Muster

WBOY
Freigeben: 2016-07-30 13:30:50
Original
946 Leute haben es durchsucht

Repository-Muster

Um den Code sauber und lesbar zu halten, ist es sehr nützlich, Repository Pattern zu verwenden. Tatsächlich müssen wir Laravel nicht nur verwenden, um dieses spezielle Entwurfsmuster zu verwenden. Im folgenden Szenario werden wir jedoch das OOP-Framework Laravel verwenden, um zu zeigen, wie wir repositories verwenden, um unser zu erstellen ControllerEbenen sind weniger ausführlich, entkoppelter und besser lesbar. Schauen wir genauer hin.

Verwenden Sie nicht repositories

. Tatsächlich ist es nicht notwendig, Repositories zu verwenden. Mit der Zeit können Sie jedoch die meisten Dinge in Ihrer Anwendung erledigen Wenn Sie sich beispielsweise nicht für die Verwendung von Repositories entscheiden, wird es sehr schwierig, Ihre Anwendung zu testen (Austausch von Implementierungen). Die spezifische Implementierung wird sehr kompliziert Schauen Sie sich eines unten an.
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

Dies ist ein sehr typischer Code, der Eloquent verwendet, um mit der Datenbank zu interagieren. Dieser Code funktioniert normal, aber das controller Ebene Wird für Eloquent eng gekoppelt. Hier können wir ein repository einfügen, um eine entkoppelte Version des Codes zu erstellen. Diese entkoppelte Version des Codes kann die spezifische Implementierung nachfolgender Programme vereinfachen.

Die Verwendung von repositories

erfordert tatsächlich einige Schritte, um den gesamten repository-Modus abzuschließen, aber wenn Sie ihn ein paar Mal ausführen, wird es natürlich zur Gewohnheit. Wir werden es im Detail erläutern Beschreiben Sie unten jeden Schritt.

1. Erstellen Sie den Repository-Ordner

. Zuerst müssen wir unseren eigenen appOrdner Repository im Ordner repositories erstellen, und dann muss jede Datei im Ordner festgelegt werden den entsprechenden Namensraum.

2: Erstellen Sie die entsprechende Interface-Klasse

Der zweite Schritt besteht darin, die entsprechende Schnittstelle zu erstellen, die die relevanten Methoden bestimmt, die unsere repository-Klasse implementieren muss, wie im Folgenden gezeigt Beispiel: Es wird noch einmal betont, dass der Namespace hinzugefügt werden muss.
HouseRepositoryInterface.php

<?php namespace App\Repositories;

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

3: Erstellen Sie die entsprechende Repository-Klasse

Jetzt können wir unsere repository-Klasse erstellen, für die wir die Arbeit erledigen Mit uns können wir in dieser Klassendatei die meisten unserer Datenbankabfragen ablegen, egal wie komplex sie auch sein mögen. Wie im folgenden Beispiel
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><span> </span></span></code>
Nach dem Login kopieren

4: Erstellen Sie einen Back-End-Dienstanbieter

Zuerst müssen Sie das verstehen sogenannter Dienstanbieter, bitte Referenzhandbuch Dienstanbieter
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><span> </span></span></code>
Nach dem Login kopieren

Natürlich können Sie auch einen neuen Ordner erstellen, um hauptsächlich unsere verwandte Dateien. providerWas der obige Code hauptsächlich besagt, ist, dass wir wissen, dass Sie
verwenden werden, wenn Sie Typhinweise controller in der Ebene HouseRepositoryInterface verwenden.DbHouseRepository

5: Aktualisieren Sie Ihr
Providers Array
Tatsächlich haben wir im obigen Code bereits eine Abhängigkeitsinjektion implementiert, aber wenn wir sie hier verwenden möchten, müssen wir sie manuell schreiben. Für mehr Komfort müssen wir dies

zur App hinzufügen / Fügen Sie im Array providers  in config/app.php einfach providersAppRepositoriesBackendServiceProvider::class,

am Ende hinzu. 6: Verwenden Sie abschließend die Abhängigkeitsinjektion, um Ihr

controller

zu aktualisieren Vervollständigen Sie das Obige. Nach diesen Inhalten benötigen wir nur noch eine einfache Aufrufmethode in

, um den vorherigen komplexen Datenbankaufruf zu ersetzen, wie folgt: Controller
HousesController.php

<?php 

use App\repositories\HouseRepositoryInterface;

class HousesController extends BaseController {

    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
So ist die gesamte Moduskonvertierung abgeschlossen

Das Obige hat den Laravel-Repository-Modus und einige Aspekte davon vorgestellt. Ich hoffe, dass er Freunden, die sich für PHP-Tutorials interessieren, hilfreich sein wird.

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage