Павел
Мб глянуть Content-type: и по нему возвращать ошибку в нужном формате
Вариант, но контент тайп часто пустой почему то, даже с браузера
The Ant
Ну не)
открой доку по симфони секурити, там всё написано про этот кейс
Павел
открой доку по симфони секурити, там всё написано про этот кейс
Ага, я буду писать 100 хэндлеров для апи и 100 таких же для сайта. Это не то
The Ant
почему 100, когда тебе надо 2 всего?
Павел
нужен глобальный механизм обработки ошибок
Павел
почему 100, когда тебе надо 2 всего?
Ну это же пример был с авторизацией
Павел
Допустим 2 админки - одна на сайте, другая в мобилке
Max
Вариант, но контент тайп часто пустой почему то, даже с браузера
Если с браузера пустой, тогда с мобилки нужно слать Content type = json
Max
И по дефолту отдавать html, а если content type=json то и формат ответа менять
Павел
Если с браузера пустой, тогда с мобилки нужно слать Content type = json
Ну это логично, только не везде content-type json даже для мобилки. Тело не во всех запорсах есть
Павел
там надо accepted-content type или как то так тогда слать
Павел
Короче нужен скорее кейс, кто как реально делает, а не предположение, как можно сделать
The Ant
ну я сделал написав авторизаторов парочку
Павел
ну я сделал написав авторизаторов парочку
Не зацикливайся на авторизацию
The Ant
как в доке сказано, не придумывав ничего. и вполне себе получилось
The Ant
Не зацикливайся на авторизацию
но ты именно про неё говоришь
Павел
но ты именно про неё говоришь
Это просто пример был. Который так же входит в кейс
Павел
авторизация и еще 100 роутов админки
Павел
одна админка в апи, другая сайт рендер
The Ant
т.е. тебе надо глобальный errorHandler поделить?
Павел
т.е. тебе надо глобальный errorHandler поделить?
Ну примерно, или есть мб другие решения, о них и спрашиваю.
Vlad
одна админка в апи, другая сайт рендер
так я ж тебе сказал как делать
Павел
так я ж тебе сказал как делать
Я в доке вижу только укзание формата в самом адресе. Если что-то другое - не совсем понял.
Vlad
Vlad
ничего в адресе не надо указывать
Павел
Спасибо, сейчас попробую. Но получается, что тогда onKernelException пролетает мимо верно?
Vlad
я не знаю зачем он тебе нужен)
Vlad
все из коробки же
Павел
я не знаю зачем он тебе нужен)
Разные ошибки домена/ инфры по разному отвечают, форматируются.
Павел
все из коробки же
Надо потестить, наверное не подойдет. Из коробки видимо просто рендеры разные включаются и станндартный ответ, ну или нормалайзеры писать.
Null
Так вроде если сериалайзер пак ставишь, он в зависимости от заголовка accept сам ошибки по-разному рендерит. Опять же, есть flatten exception.
Vlad
все так
Null
Что именно?
Павел
все так
За формат спасибо, можно его юзать вполне мануально
Null
Есть просто золотое правило: чем больше слушателей, тем хуже ) Паттерн "наблюдатель" может в итоге как и паттерн миддлверов привести к неистовой квантовой запутанности.
Павел
Что именно?
Ошибки, коды, формат. Я так понимаю можно флаттен серилизовать, но я чет привык отлавливать ExceptionEvent
Null
В смысле? Типа, на фронт ошибка с кодом 1, через апи - 2 ?
Павел
В смысле? Типа, на фронт ошибка с кодом 1, через апи - 2 ?
Ну типо ошибки валидации код 422, Домен 400, По разному мессаджи конфигурируются и берутся из самого Exception
Null
А зачем их по-разному конфигурировать? Наоборот же. Формат самой ошибки должен быть один. Просто мобилка его по-своему рендерит, пека - по своему.
Павел
Не html/json
Павел
А зачем их по-разному конфигурировать? Наоборот же. Формат самой ошибки должен быть один. Просто мобилка его по-своему рендерит, пека - по своему.
Тут support нужен конечно, но пока не охото было заморачиваться, тут как раз видно, что разные ошибки по разному рендерятся в json
Vlad
ну сделай кастомные нормализеры и все
Павел
ну сделай кастомные нормализеры и все
Как вариант, надо будет посмотреть. Получается надо из флаттена тащить экзепшен.
Vlad
дыа
Null
Цепочка обязанностей почти всегда лучше, чем гора if / switch (Если ты не голанг-разработчик :D)
Роман
Цепочка обязанностей почти всегда лучше, чем гора if / switch (Если ты не голанг-разработчик :D)
И то и другое - зло. Есть другие варианты. Всегда. Какие? Зависит от того, что сделать нужно.
Null
И то и другое - зло. Есть другие варианты. Всегда. Какие? Зависит от того, что сделать нужно.
А чем цепочка-то вам не угодила? https://github.com/BoShurik/TelegramBotBundle Вот отличный пример, как это в симфони может и должно работать)
Vlad
а че нельзя было вынести в argument resolver?
Vlad
https://github.com/BoShurik/TelegramBotBundle/blob/master/src/Controller/WebhookController.php#L37
Null
Цепочка обязанностей != симфони.
Null
Собственно, все где supports используется это ж вроде она и есть. Так что у человека выше нормалайзеры самое оно использовать.
Null
Тормоз? Нет. Они как раз быстрее работают) Просто работать с файлом, где 9001 строка кода и все это - свитч - тлен.
Павел
Подскажите плиз по тегам кэша. Правильно ли я понимаю, что лучше их избегать если это возможно в нагруженных системах? Просто пытаюсь продебажить, а там прям целые процедуры по инвалидации тега. П.С. Смотрю по редису.
Иван
а когда нужны, то это лучше, чем без них
Konstantin
сильно зависит от профиля нагрузки на кеш. в целом, редис довольно много может переварить. особенно много чтений
Иван
ну вот например статья обновилась значит сбрасывается кеш страницы статьи, кеш главной и кеш раздела
Konstantin
лично я предпочитаю явно указывать инвалидацию в коде, типа не полагаться на магические механизмы, а три раза в коде написать $redis->del(...)
Павел
Понятненько) у меня кейс, что мне чистить удобно по данным(ключу) , которые я получаю внутри колбэка. Вроде удобно тегировать, но выглядит страшно. Я понимю когда например на тег вешается много значений а они потом инвалидируются, а у меня почти 1 к 1
Konstantin
если удобно тэги, берите. начнет портить перформанс - откажетесь. нет смысла раньше времени оптимизировать
Павел
Спасибо :)
Konstantin
Спасибо :)
лично я (чисто в рамках поболтать) не люблю вендор-лок на всякие высокоуровневые либы, пользы от симфони/кэщ, мессенджера, локера и многих вещей не особо очевидна. ну тебе реально не нужен адаптер чтобы и в файлы, и в мемкеш, и в редис и еще в два десятка разных стораджей умел. скорее всего, тебе нужен конкретно редис-кеш с какими-то редис-специфик фичами, но они будут скрыты за этим мегауниверсальным адаптером. да, ты выиграешь если сменишь редис на мемкеш, например, но как часто это делается в реальных проектах? зато если они решат всё изменить, сломать и переделать, ты никуда не денешься, придется пользоваться. поэтому я стараюсь в своих командах не блокироваться на симфони-компоненты, если их без особых затрат можно заменить на своё
Konstantin
понятно, что http foundation, доктрину, твиг итп не особо заменишь своими костылями, но фанатично тащить всё что делает симфони, я бы не стал
Иван
ничо не понял
8 серверов, у каждого по редису, если удалить ключик на одном, то на втором будет старое значение
Konstantin
ну так это, кажется, задача не библиотеки symfony/cache, а redis cluster, например
Konstantin
это в целом относительно сложно решаемая задача: у нас появляется distributed transaction (мы хотим чтобы ключ удалился либо на всех 8, либо ни на одном и операция завершилась ошибкой). я прям точно уверен, что это на уровне редис-адаптера в симфони-кеше не решается
Konstantin
поэтому обычно такое стараются вытащить из прикладного кода и возложить на базу (удаляем на мастере, реплики асинхронно тоже у себя поудаляли)
Andrii
лично я (чисто в рамках поболтать) не люблю вендор-лок на всякие высокоуровневые либы, пользы от симфони/кэщ, мессенджера, локера и многих вещей не особо очевидна. ну тебе реально не нужен адаптер чтобы и в файлы, и в мемкеш, и в редис и еще в два десятка разных стораджей умел. скорее всего, тебе нужен конкретно редис-кеш с какими-то редис-специфик фичами, но они будут скрыты за этим мегауниверсальным адаптером. да, ты выиграешь если сменишь редис на мемкеш, например, но как часто это делается в реальных проектах? зато если они решат всё изменить, сломать и переделать, ты никуда не денешься, придется пользоваться. поэтому я стараюсь в своих командах не блокироваться на симфони-компоненты, если их без особых затрат можно заменить на своё
так можно рассуждать о любых библиотеках. имеет смысл иметь кеш от симфонии и не пилить велосипед. если вдруг надо переключить на другой инстанс кеша (например, с мем кеш на редис), то у вас пара строк в конфиге и работаете дальше.
Konstantin
я согласен, да, нет однозначного ответа на этот вопрос. и никогда не будет, поэтому тут включается какая-то оценка рисков, "чуйка", извините, и все такое. то есть я, начиная новый проект, сажусь и оцениваю какие плюсы мне принесет абстракция и какие минусы
Konstantin
если вероятность смены кеш-стораджа минимальна (допустим, мы сраная веб-студия, что клепает сраные сайты-визитки на одном стеке и знать ничего не знает про другой), то для меня возможность смены редиса на мемкеш какое-то слабое преимущество
Konstantin
ну типа я точно знаю что никогда в жизни мне оно не надо будет