Table des matières
Laravel Repository 模式,laravelrepository
Repository 模式
使用 repositories
1.创建 Repository 文件夹
2: 创建相应的 Interface
3:创建对应的 Repository
4:创建后端服务提供
5:更新你的Providers Array
6:最后使用依赖注入更新你的controller
Maison 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'));
        }
    }
Copier après la connexion

  

这是一个很典型的一段代码使用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);
}
Copier après la connexion

  

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);
    }
}
Copier après la connexion

  

<code><span class="php"><span class="hljs-preprocessor"> </span></span></code>
Copier après la connexion
Copier après la connexion

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');
    }
}
Copier après la connexion

  

<code><span class="php"><span class="hljs-preprocessor"> </span></span></code>
Copier après la connexion
Copier après la connexion

当然你也可以新建一个文件夹主要放我们的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'));

    }
}
Copier après la connexion

  

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

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser expliquer dans Oracle Comment utiliser expliquer dans Oracle May 03, 2024 am 12:06 AM

La commande EXPLAIN dans Oracle est utilisée pour analyser le plan d'exécution d'une instruction SQL. La méthode d'utilisation consiste à ajouter le mot-clé EXPLAIN avant l'instruction SQL. Les résultats EXPLAIN contiennent des informations telles que l'ID, le type d'opérateur, l'estimation du nombre de lignes, l'estimation du coût, l'estimation du nombre de lignes en sortie, les prédicats d'accès et les prédicats de filtre, qui peuvent être utilisés pour optimiser les performances des requêtes, identifier les opérateurs coûteux et les tables pouvant bénéficier d'une optimisation. techniques.

Que représente un caractère en SQL ? Que représente un caractère en SQL ? May 02, 2024 am 03:51 AM

Les caractères en SQL sont placés entre guillemets simples, tels que « A ». Les chaînes sont placées entre guillemets doubles et les caractères et les chaînes sont de types différents. Les caractères entourés de guillemets simples sont stockés inchangés et les chaînes entourées de guillemets doubles peuvent contenir des séquences d'échappement. Le guillemet simple lui-même peut être stocké avec une séquence d'échappement, telle que '\'''.

Comment interroger la somme de deux colonnes de données en même temps dans ThinkPhp6? Comment interroger la somme de deux colonnes de données en même temps dans ThinkPhp6? Apr 01, 2025 pm 02:54 PM

ThinkPhp6 Database Query: Comment utiliser TP6 pour implémenter les instructions SQL SelectSum (Jin), SUM (CHU) NOSYSDBUIL dans le framework ThinkPhp6, comment utiliser la déclaration SQL Select ...

Que signifie la vue en SQL Que signifie la vue en SQL May 01, 2024 pm 11:36 PM

Une vue en SQL est une table virtuelle générée par l'interrogation d'une table de base et qui ne stocke pas réellement de données. Elle offre les avantages de l'abstraction des données, du contrôle de sécurité, de l'optimisation des performances et de l'organisation logique. Les vues sont créées via l'instruction CREATE VIEW et des opérations telles que la requête, la mise à jour et la suppression peuvent être utilisées, mais les mises à jour de la vue affecteront sa table de base. Les principales différences entre les vues et les tables sont le stockage des données (virtuel ou réel), les performances (les vues sont généralement plus rapides), l'impact de la mise à jour (les vues affectent les tables de base, contrairement aux tables) et la flexibilité (les vues peuvent modifier les requêtes à tout moment, tandis que schéma de table difficile à modifier).

Comment trier la liste des produits en faisant glisser et s'assurer que la propagation est efficace? Comment trier la liste des produits en faisant glisser et s'assurer que la propagation est efficace? Apr 02, 2025 pm 01:00 PM

Comment implémenter le tri de la liste de produits en faisant glisser. Lorsque vous traitez avec le tri de la liste des produits frontaux, nous sommes confrontés à un besoin intéressant: les utilisateurs le font en faisant glisser des produits ...

Comment trier la liste des produits et prendre en charge les opérations de diffusion en traînant? Comment trier la liste des produits et prendre en charge les opérations de diffusion en traînant? Apr 02, 2025 pm 01:12 PM

Comment trier la liste des produits en faisant glisser? Lorsque vous traitez avec des plateformes de commerce électronique ou des applications similaires, vous rencontrez souvent la nécessité de trier la liste de produits ...

Les fonctions Golang optimisent les opérations de base de données d'applications Web Les fonctions Golang optimisent les opérations de base de données d'applications Web May 02, 2024 am 08:00 AM

Optimisez les opérations de base de données des applications Web : Regroupement de connexions : réutilisez les connexions de base de données et réduisez les frais liés à la création et à la destruction de connexions. Requêtes précompilées : évitez de recompiler les instructions SQL à chaque fois que vous effectuez une requête, ce qui améliore l'efficacité des requêtes. Transaction : garantissez les propriétés ACID des opérations de base de données pour obtenir l'atomicité, la cohérence, l'isolement et la durabilité.

Comment obtenir OpenId grâce à l'enregistrement frontal et le stocker dans la base de données? Comment obtenir OpenId grâce à l'enregistrement frontal et le stocker dans la base de données? Apr 01, 2025 am 10:21 AM

Comment obtenir OpenId grâce à l'enregistrement frontal et le stocker dans la base de données? Pendant le processus de développement, il est souvent nécessaire de gérer les fonctions d'enregistrement des utilisateurs, y compris l'obtention de l'utilisateur de base ...

See all articles