@ganjo888

Как внедрить DI?

есть метод index в нем я использую сторонний класс(пакет) Resolver который принимает в себя Eloquent\Builder. Хочу EloquentResolver сделать через DI.

public function index($argument)
    {
        $resolver = new Resolver(Model::query);
        $result = $resolver->build($argument);

    return $result;
    }

Мои мысли, нужно сделать интерфейс ResolverInterface объявить там публичный метод build.Прописать bind ServiceProvider, ResolverInterface::class=> Resolver::class
А в самом классе создать __cunstruct(ResolverInterface $resolver), и пользоваться уже с $resolver , вот только не понятно им пользоваться, ведь в него мне нужно передать Eloquent\Builder
Подскажите как это всё лучше сделать, не судите строго...
  • Вопрос задан
  • 145 просмотров
Пригласить эксперта
Ответы на вопрос 1
JhaoDa
@JhaoDa
LaravelRUS Team
DI не панацея, поэтому:

Resolver.php
public function via(Builder $builder)
{
    $this->builder = $builder;
}

public function build($argument)
{
    $this->builder->where('field', $argument)->...;
}

Cервис-провайдер
$this->singletons = [
    Resolver::class => Resolver::class
];

Контроллер
public function __construct(Resolver $resolver)
{
    $this->resolver = $resolver;
}

public function index($argument)
{
    return $resolver->via(Model::query())->build($argument);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы