
Kirill
19.02.2018
18:48:54
ща на гист залью
https://gist.github.com/SerafimArts/d3c3287f97b080f9e8dea85092af8a7c
Вот
У меня есть два типа аутентификации, по жвт токену и по хедеру (беарарер)

Google

Kirill
19.02.2018
18:50:27
по дефолту надо юзать токен, но в одной (или нескольких) из реализаций надо использовать другую реализацию
я хотел не париться и тупо для алиаса (интерфейса) прописать тег и его ловить в комапйл пассе
но...
но нельзя

Bohdan
19.02.2018
18:51:27
чтобы у разных алиасов одного сервиса были разные теги?

Kirill
19.02.2018
18:51:37
нет
задача не выставить тег
задача прочитать метадату интерфейса (алиаса) и разрулить реализации
тег - это один из способов, о которых я знаю, и который нихрена не работает для алиасов
ещё мне приходит на ум юзать autowiring_type, вместо алиаса
тогда с тегами будет всё ок

Bohdan
19.02.2018
18:54:30
все равно непонятно из гиста
его разве не убрали?

Google

Kirill
19.02.2018
18:54:47
кого?

Bohdan
19.02.2018
18:55:12
autowiring_type
ну зависит ещё от версии симфони у тебя

Kirill
19.02.2018
18:55:35
у меня древняя, всё никак не могу апнуться
этот тип задепрекейтили чтоль?
а, да, в 3.3
я слоу
хм
Короче, ещё раз задача:
1) Есть интерфейс и две реализации.
2) Хочется добавить просто метадату для интерфейса и где-то потом её прочитать.
3) Интерфейс указывается алиасом на дефолтную реализацию (одну из двух).
Вот и всё
у меня идей нет
=\
есть идея переопределить класс Alias
но это чот вообще печаль тогда

Andrew
19.02.2018
19:01:02
Переписать проект

kekenec
19.02.2018
19:01:53
Может кто-нибудь пояснить за ServiceValueResolver (который должен резолвить аргументы контроллера в роутере)? Почему мы ищем в контейнере сервисы с id вида FQCN::Action вместо FQCN? Почему далее ищем сам сервис не по типу (хотя суть в type-hinting же, не?), а по имени переменной?

Kirill
19.02.2018
19:03:35
@BonBonSlick так я и переписываю как раз)
просто пытаюсь чуть улучшить этот убогий симфонёвый контейнер)

Andrew
19.02.2018
19:04:02
он там получше ларавел

Kirill
19.02.2018
19:04:17
ну, кажется что нет
хотя

Google

Kirill
19.02.2018
19:05:15
@BonBonSlick так как в симфоне сделать контекстуальный биндинг?

Andrew
19.02.2018
19:05:19
если в плане разработчика, то контейнер симфони лучше, мы его сами вертим как хотим

Kirill
19.02.2018
19:05:50
окок
лучше
так как предоставить в конкретном месте конкретную реализацию по интерфейсу, а в остальных (местах) другие реализации?
только автовайрингом

Andrew
19.02.2018
19:07:43
думаю вам что то в таком роде
https://symfony.com/doc/current/service_container/service_decoration.html

Kirill
19.02.2018
19:07:57
мимо
не оно
т,е. сказать контейнеру: "Когда Х или его потомки требуют сервис Y предоставить ему другую реализацию"
как в ларке: ->when(ExampleController::class)->needs(SomeRepoInterface::class)->give(SomeDBRepo::class)

Kirill
19.02.2018
19:10:32
и когда резволится ExampleController ему внедряется другая реализация
@BonBonSlick это пример того почему симфонёвый контейнер - это огрызок

Andrew
19.02.2018
19:11:17
Никогда не занимался таким

Kirill
19.02.2018
19:11:19
)
не занимался, потому что в симфоне этого нету

Andrew
19.02.2018
19:11:41
Да и в ларе не делал

Dinar
19.02.2018
19:11:52
А зачем ты пытаешься такое делать?

Andrew
19.02.2018
19:11:58
Как по мне, усложняет понимание програмы

Google

Kirill
19.02.2018
19:12:02
у меня есть два типа аутентификации

Dinar
19.02.2018
19:12:09
Я это понял.

Kirill
19.02.2018
19:12:15
нужно в одном месте её подменить на другую реализацию

Dinar
19.02.2018
19:12:20
Но в целом это выглядит нездорово

Kirill
19.02.2018
19:12:25
почему?
вход с помощью ключика для получения токена

Dinar
19.02.2018
19:12:49
Ну потому что ты как будто бы пытаешься упростить, а на самом деле создаёшь костыль.

Kirill
19.02.2018
19:12:52
и вход с помощью токена для выполнения запросов
я пытаюсь работать с интерфейсами

Admin
ERROR: S client not available

Kirill
19.02.2018
19:13:18
ну т.е. реализовать слабую связанность

Dinar
19.02.2018
19:13:29
Ну укажи явно зависимости.
Эти.

Kirill
19.02.2018
19:13:40
это уже явные зависимости

Dinar
19.02.2018
19:13:53
На уровне конфигов

Kirill
19.02.2018
19:14:00
конфигов?

Dinar
19.02.2018
19:14:08
Да. :)

Kirill
19.02.2018
19:14:17
ну это уже костыль
=(

Dinar
19.02.2018
19:14:28
Разве?

Google

Kirill
19.02.2018
19:14:33
ну т.е. сервис в одном месте, а конфиги для него в другом?
или что имеется ввиду?

Dinar
19.02.2018
19:14:55
Так ты сервисы же в ямле задаёшь

Kirill
19.02.2018
19:15:07
ну да
только класс, куда надо подсунуть реализацию - это не сервис)

Dinar
19.02.2018
19:15:23
Ну вот там и пропиши зависимость для этого.

Kirill
19.02.2018
19:15:33
т.е. его нет в контейнере

Dinar
19.02.2018
19:15:44
Контроллер можно как сервис юзать.

Kirill
19.02.2018
19:16:05
это не контроллер

Dinar
19.02.2018
19:16:30
Просто иногда дублирование - это не всегда плохо. :)

Kirill
19.02.2018
19:17:51
короче, не важно
никак, не добавить метку для алиаса, значит никак
буду знать, спасибо
чорт
сегодня очередной день **** с симфонёй. Вначале defaults в роутах не наследуются, теперь ничего не сделать с алиасами контейнера
не фрейм, а CMS какая-то :D
шаг влево, шаг вправо и всё рушится

Dinar
19.02.2018
19:19:41
:)
Но все очень явно и без магии зато.
Это большое преимущество для больших систем.

Kirill
19.02.2018
19:20:20
ну...
хз