2015-10-15 6 views
1

Я работаю с laravel 5, и я начинающий разработчик, поэтому я только что научился использовать шаблон репозитория. Теперь, как новички идут, я сначала использовать routes.php файл, чтобы связать мой UserRepositoryInterface к DbUserRepository так:Какой провайдер я использую для привязки репозиториев базы данных в laravel 5?

App::bind('UserRepositoryInterface', 'DbUserRepository'); 

Это просто псевдо, изображение в namepspaces с кодом выше тоже.

Итак, после этого я понял, что есть что-то, называемое провайдером услуг, который должен содержать такой код. Теперь я реорганизовал это в AppServiceProvider в моей папке Providers, и он отлично работает.

Но так как у меня будет гораздо больше репозиториев, это хорошая идея разместить их в AppServiceProvider или я должен пойти и сделать выделенного провайдера для своих хранилищ и связать их там? Каков наилучший способ сделать это? Есть ли стандарт для этого?

+2

Я думаю, что это будет вниз личные предпочтения и масштаб вашего приложения. Я делаю это так, как вы описали, и разбил мой «AppServiceProvider» на логические методы. Поэтому я привязываю все эти типы привязок к методу 'registerInterfaces()', а затем вызываю его из метода 'register' в моем' AppServiceProvider'. –

+0

Я только что пошел и создал 'RepositoryServiceProvider'. И я думаю, вы правы, это нечто, что сводится к моим личным предпочтениям, а не к стандарту. – Rohan

ответ

1

Так поздно я должен понять, что это все о предпочтении, так что я закодировал RepositoryServiceProvider, в котором я связываю все контракты хранилища для желаемых реализаций так:

<?php 

namespace App\Providers; 

use Illuminate\Support\ServiceProvider; 

use Archive\Repositories\TenantRepository; 
use Archive\Repositories\TenantRepositoryEloquent; 

use Archive\Repositories\UserRepository; 
use Archive\Repositories\UserRepositoryEloquent; 

use Archive\Repositories\OrderRepository; 
use Archive\Repositories\OrderRepositoryEloquent; 

class RepositoryServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap the application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     // 
    } 

    /** 
    * Register the application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     $this->app->bind(TenantRepository::class, TenantRepositoryEloquent::class); 
     $this->app->bind(UserRepository::class, UserRepositoryEloquent::class); 
     $this->app->bind(OrderRepository::class, OrderRepositoryEloquent::class); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^