Создание Laravel репозиториев и привязка в качестве поставщиков услуг - PullRequest
5 голосов
/ 19 февраля 2020

У меня есть Symfony и Spring, это мой первый проект с Laravel, и, насколько я понял, Laravel не имеет встроенной поддержки для репозиториев. Я нашел несколько уроков; некоторые из них пытаются предложить архитектуру, такую ​​как Spring или Symfony.

В качестве примера этот блог предлагает структуру папок , например:

---- Repository
------ Eloquent
-------- UserRepository.php // extends BaseRepository
-------- BaseRepository.php // implements EloquentRepositoryInterface
------ UserRepositoryInterface.php
------ EloquentRepositoryInterface.php 

, что неплохо. Я смущен тем, что автор предлагает связать эти репозитории в качестве поставщиков услуг и обращаться к ним в контроллере в качестве поставщиков.

class RepositoryServiceProvider extends ServiceProvider 
{  
    public function register() 
    { 
        $this->app->bind(EloquentRepositoryInterface::class, BaseRepository::class);
        $this->app->bind(UserRepositoryInterface::class, UserRepository::class);
    }
}

Тогда я решил найти библиотеку в Github, которая фокусируется на создании Eloquent Repository, который напрямую использует пользовательский репозиторий в контроллере:

class HomeController extends Controller
{
    public function index(UserRepository $userRepository)
    {
        return $userRepository->get();
        ...

С архитектурной точки зрения, нужно ли связывать репозитории как провайдеры ? (Давайте подумаем тот факт, что AWS или Elasti c Search могут присоединиться к проекту и репозитории могут отличаться для одной модели)

И самое главное, почему Laravel не имеет встроенного репозитория поддержка шаблона? Спасибо

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

почему у Laravel нет встроенного шаблона хранилища

Поскольку нет единого мнения относительно того, как их следует использовать, если они вообще используются.

Например, я использую хранилища в качестве посредника между laravel моделями и laravel контроллерами, которым требуется экземпляр экземпляра модели, и я никогда не внедряю их в контроллеры, а создаю их экземпляры вручную при необходимости.

нужно ли связывать репозитории как провайдеры?

Как уже говорилось выше, консенсуса нет, поэтому NO .

Зависит от того, как вы спроектируете свои репозитории, вы можете создать их вручную, внедрить их в экземпляр контроллера (в __contruct(UserRepository $userRepository)), как вы можете видеть в laravel с нуля, из laracast, или использовать их в качестве поставщиков услуг.

0 голосов
/ 19 февраля 2020

С Laravel Шаблон репозитория - Как использовать и почему это важно

Последний шаг - регистрация этого поставщика услуг в нашей конфигурации /app.php. Откройте этот файл и добавьте провайдерам наш провайдер App \ Providers \ RepositoryServiceProvider :: class

Теперь наше приложение знает, какой класс оно должно использовать, когда мы вводим объекты по его интерфейсам.

Вот почему вам нужно привязать свои интерфейсы следующим образом:

/** 
* Register services. 
* 
* @return void  
*/ 
public function register() 
{ 
   $this->app->bind(EloquentRepositoryInterface::class, BaseRepository::class);
   $this->app->bind(UserRepositoryInterface::class, UserRepository::class);
}

Для того, чтобы Laravel знал, что создавать, когда вы выполняете в вашем контроллере:

private $userRepository;

public function __construct(UserRepositoryInterface $userRepository)
{
   $this->userRepository = $userRepository;
}

[EDIT 1]

Также есть отличная статья из Laravel документации для Внедрение зависимостей : laravel .com / docs / мастер / контроллеры # зависимостях инъекции и-контроллеры

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...