【问题标题】:Where to add own repository class and interfaces in Laravel?Laravel 在哪里添加自己的存储库类和接口?
【发布时间】:2016-11-19 13:08:30
【问题描述】:

我正在尝试在 Laravel 中添加自定义存储库(合同和 Eloquent)。
我不明白在哪里添加它们以及如何与服务绑定。 任何机构都可以展示在 Laravel 中添加自己的存储库类和接口的最佳示例吗?

提前致谢

【问题讨论】:

  • 不确定我是否关注。 Laravel 已经包含 Eloquent。你到底想做什么?

标签: php laravel web web-deployment


【解决方案1】:

我喜欢构建 Laravel 代码的方式是:

型号 - App\Models\*

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model as BaseModel;

class Model extends BaseModel
{
    // 
}

合同 - App\Repositories\Contracts\*

<?php 

namespace App\Repositories\Contracts;

interface Repository
{
    // All the common methods for eloquent like - all, paginate, find, where, etc...
}

存储库 - App\Repositories\Db\*

<?php 

namespace App\Repositories\Db;

class ExampleRepository
{
    // All the CRUD related methods here...
}

服务 - App\Services\*

<?php 

namespace App\Services;

class ExampleService
{
    // All the logic & business related methods here...
}

这就是我喜欢用 laravel 的方式来构建我的代码。

希望这会有所帮助!

【讨论】:

    【解决方案2】:
    1. 在您的 App 文件夹中创建一个目录。Like - App/Acme
    2. 在 Acme 文件夹中创建一个存储库文件。 App/Acme/CustomRepository.php 并在该存储库文件上导入名称空间。Like- namespace Acme;
    3. 使用您的模型。喜欢 - 使用 App\Models\User;
    4. 在你的控制器中注入 CustomRepository Class.Like-

      自定义控制器类扩展控制器{

      私人 $customRepo;

      public function __construct(CustomRepository  $customRepo)
      {
      $this->customRepo= $customRepo;
      }
      

      }

    【讨论】:

      【解决方案3】:

      为了使用存储库模式(如果你想说的话),你有两个选择,一个是在自定义命名空间下实现(比如说App\Repositories),一个与您想在所有存储库中使用的方法,可能是AbstractRepository 或类似的东西,这个选择很痛苦,因为您必须编写大量代码,另一种选择(我会使用)是安装以下包https://github.com/andersao/l5-repository,真的很有用,里面已经有很多方法了,只要按照自述文件的说明来实现这个模式,你就不会遇到任何问题,希望对你有帮助,加油! ;)

      【讨论】:

      • 我有一个小项目,我不想添加额外的包。我想知道目录结构。
      • 好吧,在这种情况下,使用这个教程,他们在那里解释,上面的链接,最好的! bosnadev.com/2015/03/07/using-repository-pattern-in-laravel-5heera.it/laravel-repository-pattern
      • 谢谢!!这就是我需要的。
      • @VijayKumarVerma 如果您使用 Eloquent,则无需使用存储库。你有什么理由使用存储库吗?
      • 好吧,我可以理解,如果你有一些超级棒的项目并想添加一个额外的层来保持清晰,但如果你有一个像你说的那样的小项目,我认为您可以开箱即用地使用 Eloquent
      猜你喜欢
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 2010-11-07
      相关资源
      最近更新 更多