Size: a a a

2020 May 03

EK

Evgeniy Kuvshinov in Laravel Pro
никогда не понимал смысл тэгов и наследований в контейнерах
источник

V

Vadim in Laravel Pro
invariance
добавил новый класс, потом надо не забыть его влепить в сервис провайдер
Тут ты прав, в ларке нет instanceof, но это уже проблемы ларки
источник

EK

Evgeniy Kuvshinov in Laravel Pro
и какое это может иметь применение в здравом уме)
источник

i

invariance in Laravel Pro
Evgeniy Kuvshinov
никогда не понимал смысл тэгов и наследований в контейнерах
Я тоже не понимал, пока не понадобилось
источник

EK

Evgeniy Kuvshinov in Laravel Pro
а нафига?)
источник

i

invariance in Laravel Pro
Vadim
Тут ты прав, в ларке нет instanceof, но это уже проблемы ларки
ну вот я про то и говорю
источник

V

Vadim in Laravel Pro
Evgeniy Kuvshinov
никогда не понимал смысл тэгов и наследований в контейнерах
В тегах очень большой смысл. У тебя просто не было таких задач. К примеру, у тебя класс ждет набор классов, реализующих интерфейс. Будешь руками передавать каждый новый класс или запилишь тег, чтобы в класс передать Command ...$commands?
источник

EK

Evgeniy Kuvshinov in Laravel Pro
Vadim
В тегах очень большой смысл. У тебя просто не было таких задач. К примеру, у тебя класс ждет набор классов, реализующих интерфейс. Будешь руками передавать каждый новый класс или запилишь тег, чтобы в класс передать Command ...$commands?
какая разница что я буду проставлять тэги командам
источник

EK

Evgeniy Kuvshinov in Laravel Pro
что просто просто проставлю массив комманд
источник

V

Vadim in Laravel Pro
invariance
ну вот я про то и говорю
Никогда не поздно написать свое расширение. Симфони же просто достает каждый класс и смотрит, есть ли конкретный интерфейс у $reflection->getInterfaces(), и если да, ставит тег
источник

V

Vadim in Laravel Pro
Evgeniy Kuvshinov
какая разница что я буду проставлять тэги командам
Потому что массив, а то вариадик
источник

EK

Evgeniy Kuvshinov in Laravel Pro
ну вот у меня свой di
источник

EK

Evgeniy Kuvshinov in Laravel Pro
и там вопрос решен очень просто
источник

EK

Evgeniy Kuvshinov in Laravel Pro
если аргумент variadic то используется имя аргумента
источник

EK

Evgeniy Kuvshinov in Laravel Pro
в данном случае commands
источник

V

Vadim in Laravel Pro
Evgeniy Kuvshinov
если аргумент variadic то используется имя аргумента
А если несколько интерфейсов?
источник

EK

Evgeniy Kuvshinov in Laravel Pro
я просто в контейнер регаю зависимость commads в виде массива, которая содержит в себе объекты имплементищие Command
источник

i

invariance in Laravel Pro
Evgeniy Kuvshinov
а нафига?)
Пример, нужно реализовать сидеры из ларки.

В симфони пишем:
_instanceof:
       App\Service\Seeder\SeederInterface:
           tags: ['app.data_seeders']


Потом просто инжектим iterable $dataSeeders в команду run-seeds, к примеру. И там внутри
public function make(iterable $dataSeeders)
   {
       foreach ($dataSeeders as $seeder) {
           $this->runSeeder($seeder);
       }
   }


И не надо каждый отдельный сидер в конфиге описывать, все единообразно отработают
источник

V

Vadim in Laravel Pro
Evgeniy Kuvshinov
я просто в контейнер регаю зависимость commads в виде массива, которая содержит в себе объекты имплементищие Command
Не вижу преимуществ перед тегам ларки или instanceof симфони
источник

EK

Evgeniy Kuvshinov in Laravel Pro
Vadim
А если несколько интерфейсов?
commands => function (Container $container) {
  return [
        $container->get(A::class),
        $container->get(B::class),
  ]
}
источник