• Как сделать перехват запроса микросервисом?

    grabbee
    @grabbee Автор вопроса
    tukreb,

    микросервисную архитектуру в единой приложение


    Вы уверены что правильно понимаете что такое микросервисы? Они и есть отдельные независимые машины(виртуально, поды/контейнеры если в k8s). Они и должны друг друга дергать. Как это делать через MQ я знаю, но хочу сделать проще - напрямую.

    Вопрос в том, что я не нашел простого способа передать запрос без изменения дальше. Запрос нужно получить, сформировать запрос и руками послать его дальше, принять ответ и выдать его клиенту. Это сложно.

    Вероятно есть что-то готовое. В этом и весь вопрос. Я нашел только jenssegers/proxy но не уверен что оно именно то
  • Как сделать перехват запроса микросервисом?

    grabbee
    @grabbee Автор вопроса
    tukreb, микросервис фактически это отдельный сервер
  • Как сделать перехват запроса микросервисом?

    grabbee
    @grabbee Автор вопроса
    Максим Федоров, не атентификация. Проверка файлов при загрузке и тд. Отпечаток данных и тп
  • Почему Chrome считает заголовки запроса разными(Link preload), хотя они идентичны?

    grabbee
    @grabbee Автор вопроса
    Поддерживается в Хроме с 4 версии. Что я там не заметил?
  • Почему Chrome считает заголовки запроса разными(Link preload), хотя они идентичны?

    grabbee
    @grabbee Автор вопроса
    Благодарю. При проблеме с CORS другая ошибка. Она была. И решилась crossorigin="use-credentials"
  • Как узнать/установить нужное значение конфига для php-fpm?

    grabbee
    @grabbee Автор вопроса
    > Зачем это топе?

    все бухают. только я один разбираюсь
  • Как правильно использовать вложенные бандлы?

    grabbee
    @grabbee Автор вопроса
    Максим, благодарю. Всё так и есть. Писаю против ветра в свободное от работы время...
    Пока по озвученным проблемам нашел решения
    где-то php72, а где-то уже php81

    "php": ">=7.4.0",
    Не даст установить бандл. Нужно будет сначала его обновить до используемой версии. То есть в новом приложении с php 8 запустится новый бандл. А в старых нет, нужно будет довыпустить версию для старых проектов, либо обновить сами проекты.

    с универсальной моделью, в которой у вас есть User с 50-100 полями в базе

    @ORM\MappedSuperclass
    Не нужно. Сейчас делаю базовый СуперКласс, Интерфейс. От них, если нужно что-то ещё, наследуюсь. Только начинаю свой "правильный" путь. Может оно и не правильно.

    будут миграции мешать

    Тут хз. В бандлах нет сущностей, только абстракции. Сама реализация в приложении. Тут уже хз, вроде нормально должно работать. Миграции для тестов есть в бандле. Там можно будет подсмотреть наверное.

    и точно так же сидеть ночами

    Мне так спокойнее, никто не отвлекает. Я очень нервный. Орущие дети или собаки за окном сильно дискоординируют :)
  • Как правильно использовать вложенные бандлы?

    grabbee
    @grabbee Автор вопроса
    лучше эти все вещи скопировать в каждый свой проект

    Я уже пробовал. Обновлять это потом как? Я переписываю и обновляю "общие вещи" регулярно. Лезть потом в каждый и править там?.. Это ночной кошмар, как по мне))
    С такими темпами вы придумаете бандл для приложения

    Я уже в этом месте :)

    Например на основе бандла авторизации легко сделать сервис, просто установив туда его. Или впихнуть этот бандл в монолит, и работать будет одинаково с теми же настройками(настройки по умолчанию тоже)

    Но я пока не ощутил что лучше. Проблемы с зависимостями или проблемы с дублированием кода. Решение конфликтов зависимостей багов не привносит. А отдельные версии кода - я через два дня забываю где что писал))
  • Как правильно использовать вложенные бандлы?

    grabbee
    @grabbee Автор вопроса
    Я из тех извращенцев, которые свой код на бандлы дробят. У меня несколько похожих приложений на симфони, и чтобы не дублировать код, и формирую его в бандлы.

    В данном случае один (Б)бандл формирует токены JWT+refresh токен. А второй (А)бандл расширяет его остальным функционалом - регистрация, контроллер входа, напоминание пароля и так далее.

    Хочу чтобы при установке "полного" (А)бандла через один общий конфиг всё настроить. Чтобы не тянуть дополнительно (Б)бандл и не настраивать его отдельно.

    Я уже всё сделал. Просто интересно, по феншую или нет...
  • Нужно ли для абстрактного класса применять интерфейс?

    grabbee
    @grabbee Автор вопроса
    Дмитрий Гординский, благодарю. Я выше в комментариях к вопросу описал всю конфигурацию которая есть. У меня только одна реализация, в том то и дело. И оно его не находит. Причина скорее всего в том, что там отдельная конфигурация для тестов. Но я в ней всё прописал. Всё равно болт...
  • Нужно ли для абстрактного класса применять интерфейс?

    grabbee
    @grabbee Автор вопроса
    BoShurik, сейчас попробовал. Не работает. Тут такая же проблема как в предыдущем вопросе наверное

    services.yaml
    services:
      _defaults:
        autowire: true  
        autoconfigure: true  
    
      Vendor\SomeBundle\:
        resource: '../src/*'
        exclude: '../src/{DependencyInjection,Entity,Examples,Repository,Message}'
    
      Vendor\SomeBundle\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']
    
      Vendor\SomeBundle\Controller\TokenController:
        autowire: false


    Вот. Я отключил для него autowire. Но затем пробую в тестах включить, как описал выше. И оно не работает даже в таком виде
    services_test.yaml
    services:
      _defaults:
        autowire: true 
        autoconfigure: true 
        public: true
     
      Vendor\SomeBundle\Controller\SomeController:
        autowire: true
        arguments:
          $authenticator: Vendor\SomeBundle\Examples\Authenticator
     
      Vendor\SomeBundle\Examples\Authenticator:
        calls:
          - setIdentityClassName: ...


    Cannot autowire service "Vendor\SomeBundle\Controller\SomeController": argument "$authenticator" of method "__construct()" references interface "Vendor\SomeBundle\S
    ervices\AuthenticatorInterface" but no such service exists. You should maybe alias this interface to the existing "Vendor\SomeBundle\Examples\Authenticator" service.


    Папку с кэшем удаляю и следом команду очистки кэша запускаю.

    Начитает работать только после
    services_test.yaml
    Vendor\SomeBundle\Services\AuthenticatorInterface:
        '@Vendor\SomeBundle\Examples\Authenticator'
  • Нужно ли для абстрактного класса применять интерфейс?

    grabbee
    @grabbee Автор вопроса
    BoShurik, я же спрашиваю об этом ))) я не пробовал. Делал по наитию - не заработало. Решил спросить почему не едут лыжи. Сейчас попробую.
  • Нужно ли для абстрактного класса применять интерфейс?

    grabbee
    @grabbee Автор вопроса
    BoShurik, только я и хочу понять, почему у меня эта магия не работает :)
    Максим Федоров,
    Cannot autowire service "Vendor\SomeBundle\Controller\SomeController": argument "$authenticator" of method "__construct()" references interface "Vendor\SomeBundle\S
    ervices\AuthenticatorInterface" but no such service exists. You should maybe alias this interface to the existing "Vendor\SomeBundle\Examples\Authenticator" service.


    services:
      _defaults:
        autowire: true 
        autoconfigure: true 
        public: true
     
      Vendor\SomeBundle\Controller\SomeController:
        autowire: true
     
      Vendor\SomeBundle\Examples\Authenticator:
        calls:
          - setIdentityClassName: ...


    interface AuthenticatorInterface {}
    abstract class AbstractAuthenticator implements AuthenticatorInterface {}
    class Authenticator extends AbstractAuthenticator {}


    if only one service is discovered that implements an interface, and that interface is also discovered in the same file, configuring the alias is not mandatory and Symfony will automatically create one.


    Вот же они оба в одном файле определены
  • Нужно ли для абстрактного класса применять интерфейс?

    grabbee
    @grabbee Автор вопроса
    Так требует если у интерфейса более одной реализации. И у меня как раз была одна. А когда одна, он автоматически его находит. Вроде так было всегда
  • Нужно ли для абстрактного класса применять интерфейс?

    grabbee
    @grabbee Автор вопроса
    BoShurik, у вас две. Если SomeBar убрать, то ведь одна будет? Я как раз этот случай описал же.
  • Где в доке описано поведение тэггирования сервисов?

    grabbee
    @grabbee Автор вопроса
    BoShurik, справедливости ради, про services_test.yaml во всей доке только одна строка. И как он мержится или нет ничего не написано. Очевидно что services.yaml в приложении и services.yaml в бандлах, это разные вещи. Здесь же это два файла рядом
    If you need to test private services that have been removed (those who are not used by any other services), you need to declare those private services as public in the config/services_test.yaml file.

    Я сделал вывод что они друг друга дополняют
  • Где в доке описано поведение тэггирования сервисов?

    grabbee
    @grabbee Автор вопроса
    BoShurik, я скорее всего не там прописал эти настройки. Там параллельно config/services_test.yaml есть. И эти проблемные сервисы в конфиге тестов прописаны, а _instanceof я в services.yaml писал о_О
  • Где в доке описано поведение тэггирования сервисов?

    grabbee
    @grabbee Автор вопроса
    BoShurik, я так не пробовал :)

    Я надеюсь что оно так подключит
    Vendor\SomeBundle\:
        resource: '../src/*'
        exclude: '../src/{DependencyInjection,Entity,Kernel.php}'
  • Где в доке описано поведение тэггирования сервисов?

    grabbee
    @grabbee Автор вопроса
    Я то вопрос задал исключительно из-за того, что ничего подобного в доке не встречал

    https://stackoverflow.com/a/54349954/4489502
    Therefor if the service you are attempting to tag with _instanceof is not declared in the same services.yml file the tag will not be added.


    Вроде нигде в доке не пишут что их нужно объявлять в одном файле или типа того. Вчера только видел где-то что автоконфигурирование(_instanceof) в бандле не предусмотрено, но уже не могу найти где я это видел :)
  • Где в доке описано поведение тэггирования сервисов?

    grabbee
    @grabbee Автор вопроса
    BoShurik, так у меня включено
    services:
      _defaults:
        autowire: true  
        autoconfigure: true 
        public: true
    
        _instanceof: 
            App\Security\CustomInterface:
                tags: ['app.custom_tag']

    И в таком виде оно у меня не работало ни как. Только если в Расширение писать через registerForAutoconfiguration

    И вы сначала пишите "что и не должно", а теперь, что должно, но не включено.

    Если я правильно понимаю. Они говорят, что рекомендуеcя явно прописывать, потому что иначе долго компилироваться будет. Но работать вроде должно и без явного определения.

    Я попробовал сначала @AutoconfigureTag('some_tag') и это не сработало. Потом в сервисах через _instanceof прописал. В итоге только через registerForAutoconfiguration работает. Я оставил и аннотацию, и _instanceof, почистил кэши все. И если я убираю строчку с registerForAutoconfiguration - и findTaggedServiceIds ничего не находит.