Size: a a a

2020 October 23

VS

Vlad Sobenko in symfony
Константин Грачев
А эта кука должна уйти в респонсе, или не обязательно?
Да, должна вроде. Ну тот легаси сервис менять точно не собираюсь.
источник

КГ

Константин Грачев... in symfony
Просто может для контроллеров, которые обращаются к легаси стоит как то обернуть вызов header функции и добавить её в к Response объекту после контроллера
источник

КГ

Константин Грачев... in symfony
> добавить её
В смысле то что легаси в этот header насовать успело
источник

VS

Vlad Sobenko in symfony
Константин Грачев
Просто может для контроллеров, которые обращаются к легаси стоит как то обернуть вызов header функции и добавить её в к Response объекту после контроллера
Хотелось бы такую штуку. Чтобы можно было обьявить контроллер/сервис типа лейзи, но чтобы при его доставании дочерние лейзи достались из контейнера мгновенно. Ну такого вроде нет)
источник

КГ

Константин Грачев... in symfony
Vlad Sobenko
Хотелось бы такую штуку. Чтобы можно было обьявить контроллер/сервис типа лейзи, но чтобы при его доставании дочерние лейзи достались из контейнера мгновенно. Ну такого вроде нет)
Если у тебя легаси ставит заголовки, может оно ещё где то тоже самое делает. Я бы не костылил DI в одном месте, а написал бы листенер, который перехватил установку заголовков и засунул их в Response как полагается
источник

VS

Vlad Sobenko in symfony
Константин Грачев
Если у тебя легаси ставит заголовки, может оно ещё где то тоже самое делает. Я бы не костылил DI в одном месте, а написал бы листенер, который перехватил установку заголовков и засунул их в Response как полагается
Та не, ты не в ту сторону думаешь. Проблем с легаси сервисом нет, есть только там, где он юзается в стрим рестонсе.
источник

D

Dmitry in symfony
Константин Грачев
Если у тебя легаси ставит заголовки, может оно ещё где то тоже самое делает. Я бы не костылил DI в одном месте, а написал бы листенер, который перехватил установку заголовков и засунул их в Response как полагается
а как ? а если там header вызывается, т.е встроенная функция
источник

k

knopkod4v in symfony
источник

SP

Sergey Protko in symfony
иногда хочется чего-то делать с данными которые ты загрузил. скорее как кастыль
источник

КГ

Константин Грачев... in symfony
Dmitry
а как ? а если там header вызывается, т.е встроенная функция
Походу без костылей никак, есть всякие function_override, но это надо доустанавливать экстеншены.
Как вариант можно find/replace найти вызовы header функций в легси коде и поменять на вызов своей функции. Это не такой сложный рефакторить, если конечно не - "не не не в легаси не полезим совсем"
источник

D

Dmitry in symfony
Константин Грачев
Походу без костылей никак, есть всякие function_override, но это надо доустанавливать экстеншены.
Как вариант можно find/replace найти вызовы header функций в легси коде и поменять на вызов своей функции. Это не такой сложный рефакторить, если конечно не - "не не не в легаси не полезим совсем"
я думаю если бы автор мог и хотел полезть в легаси он бы тут такие вопросы не задавал
источник

КГ

Константин Грачев... in symfony
Vlad Sobenko
Та не, ты не в ту сторону думаешь. Проблем с легаси сервисом нет, есть только там, где он юзается в стрим рестонсе.
кмк вместо изначальной проблемы выдумал себе новую, которая якобы решает изначальную и на ней концентрируешься. Я же предложил другой вариант решения изначальной
источник

КГ

Константин Грачев... in symfony
Dmitry
я думаю если бы автор мог и хотел полезть в легаси он бы тут такие вопросы не задавал
Я бы не был так уверен на твоём месте
источник

D

Dmitry in symfony
Vlad Sobenko
Как красиво подружить lazy service и stream response?
Вообщем в контроллере отдается StreamResponse. Он идет по определенным сервисам и берёт из них части резпонса для стрима. В одном из этих сервисов юзается lazy load service. Тоесть он достается из контейнера, когда только до него дошла очередь. Ну а там при доставании некрасивое легаси, которые хочет поставить куку. В итоге получаю ошибку headers already sent(так как stream response уже поставил хедеры).
Решается доставанием lazy load service из контроллера и вызовом любого метода в самом начале, где он не нужен.
Но решение не очень, может как то покрасивше можно?
ob_start
источник

D

Dmitry in symfony
хотя оно кажется именно хедеры то и не перехватывает
источник

SP

Sergey Protko in symfony
ob_start делает буферизацию для тела сообщения, а не для заголовков
источник

VS

Vlad Sobenko in symfony
Константин Грачев
Походу без костылей никак, есть всякие function_override, но это надо доустанавливать экстеншены.
Как вариант можно find/replace найти вызовы header функций в легси коде и поменять на вызов своей функции. Это не такой сложный рефакторить, если конечно не - "не не не в легаси не полезим совсем"
Начинал я когда то такой рефактор.
Там короче header() вызывается из любых недр. Решил заменить такие вызовы на вызов сервиса, который бы хранил хедеры. А потом перед отдачей респонса в сабскрайбере ложил бы их в Response.
Но обламался, когда увидел кучу мест, где вместо отдачи респоса echo + exit;
На том и закончилось)
источник

КГ

Константин Грачев... in symfony
Vlad Sobenko
Начинал я когда то такой рефактор.
Там короче header() вызывается из любых недр. Решил заменить такие вызовы на вызов сервиса, который бы хранил хедеры. А потом перед отдачей респонса в сабскрайбере ложил бы их в Response.
Но обламался, когда увидел кучу мест, где вместо отдачи респоса echo + exit;
На том и закончилось)
Не очень понятно причём тут проблема о которой ты спрашиваешь и exit. Ибо в твоём текущем выполнении явно никаких exit нет
источник

VS

Vlad Sobenko in symfony
Константин Грачев
Не очень понятно причём тут проблема о которой ты спрашиваешь и exit. Ибо в твоём текущем выполнении явно никаких exit нет
Не, в данном кейсе нет проблем с exit.
Я просто, к слову, про рефактор рассказал.
источник

КГ

Константин Грачев... in symfony
Vlad Sobenko
Не, в данном кейсе нет проблем с exit.
Я просто, к слову, про рефактор рассказал.
поменять вызов глобальной функции на свою - это рефакторинг уровня find/replace. Не знаю всех подводных камней что у тебя там, но я бы наверное именно так сделал
источник