The Ant
я прислушался 😄
Konstantin
да как обычно, программист пишет для себя, а не для людей. Я уже привык к подобным глупостям.
ты плоховато себе вещи представляешь, итераторы в симфони не для красоты нужны, а чтобы что-то вычислить на момент обращения, иногда просто отдать подготовленный массив нельзя, тк данные могут как-то поменяться. либо их инициализация слишком тяжела, чтобы ее делать впустую. то есть тебе подготовили массив errors на условных 20 мегабайт в памяти и 100мс их подготовки, а ты ими не воспользовался, тк в этом случае оно тебе было не нужно. а платят за это все пользователи фреймворка, ведь у всех и каждого происходит эта инициализация. поэтому симфони выбрали как раз разумный подход - ты платишь только за то, что используешь. а что ты решил поиграться в красивый код, который не умеет в итераторы, это, в общем-то, сугубо твои личные половые трудности. пхп вообще слабо для фп-like годится: он и неконсистентный, и неудобный, и не выразительный
Юра
ты плоховато себе вещи представляешь, итераторы в симфони не для красоты нужны, а чтобы что-то вычислить на момент обращения, иногда просто отдать подготовленный массив нельзя, тк данные могут как-то поменяться. либо их инициализация слишком тяжела, чтобы ее делать впустую. то есть тебе подготовили массив errors на условных 20 мегабайт в памяти и 100мс их подготовки, а ты ими не воспользовался, тк в этом случае оно тебе было не нужно. а платят за это все пользователи фреймворка, ведь у всех и каждого происходит эта инициализация. поэтому симфони выбрали как раз разумный подход - ты платишь только за то, что используешь. а что ты решил поиграться в красивый код, который не умеет в итераторы, это, в общем-то, сугубо твои личные половые трудности. пхп вообще слабо для фп-like годится: он и неконсистентный, и неудобный, и не выразительный
Он не поймет
Юра
Ведь ему же понадобилось
Юра
Значит всем должно понадобиться
Konstantin
ну то есть типа написать цикл, который делает всё то же самое, но
а) легче (не надо распаковывать итератор, не надо делать merge_recursive в цикле)
б) читаемее
в) дебажабельнее (ну и слово!)
г) управляемее (из цикла можно выйти break-ом когда угодно итд)
вроде бы проще, чем жаловаться на симфони. это как раз признак хорошего инженера: надо делать вещи "нормально", а не "красиво". впрочем, про красоту я бы тоже поспорил
The Ant
ты плоховато себе вещи представляешь, итераторы в симфони не для красоты нужны, а чтобы что-то вычислить на момент обращения, иногда просто отдать подготовленный массив нельзя, тк данные могут как-то поменяться. либо их инициализация слишком тяжела, чтобы ее делать впустую. то есть тебе подготовили массив errors на условных 20 мегабайт в памяти и 100мс их подготовки, а ты ими не воспользовался, тк в этом случае оно тебе было не нужно. а платят за это все пользователи фреймворка, ведь у всех и каждого происходит эта инициализация. поэтому симфони выбрали как раз разумный подход - ты платишь только за то, что используешь. а что ты решил поиграться в красивый код, который не умеет в итераторы, это, в общем-то, сугубо твои личные половые трудности. пхп вообще слабо для фп-like годится: он и неконсистентный, и неудобный, и не выразительный
Честно говоря. странное решение. Этот результат я могу затолкать только себе в жопуфорычь, что не очень то и гибко, и заставляет писать кучу лишнего кода.
Konstantin
плюс с редьюсами вместо циклов вторая проблема есть: нет консистентности кода. тебе всё равно в половине мест надо писать foreach-и, ну никуда от них не деться. и получится, что половина проекта на циклах, половина на фп-like обработках. и хер знает, почему бы везде не использовать единый стиль, чтобы код от функции к функции не отличался
The Ant
И почему пхпщники не любят редьюсеры...
artem
Konstantin
не, это как раз нормальное решение. фп-лайк в пхп неудобен, им никто не пользуется (я тебя уверяю, это так) дальше простых map/filter. поэтому основная линия партии - это как раз императивные циклы и в целом императивная обработка. на это намекает даже то, что все эти map/filter/reduce не принимают iterable/Traversable, а требуют массивы. это прям охуенно огромные светящиеся красные буквы "чуваки, пхп для этого не предназначен, оно вам не нужно". плохо это или хорошо - отдельный вопрос, но прямо сейчас положение вещей такое, и, на мой взгляд, глупо против него переть
Konstantin
И почему пхпщники не любят редьюсеры...
да оно не нужно 🙂 это правда лишние накладные расходы, усложненная читаемость. фп-лайк более-менее начинает быть удобным в конкурентных средах - параллельных или асинхронных. там иммутабельность, бинд контекста и прочее действительно помогает писать более параллельный код, но пхп однопоточный и неконкурентный, к чему это всё?
The Ant
не, это как раз нормальное решение. фп-лайк в пхп неудобен, им никто не пользуется (я тебя уверяю, это так) дальше простых map/filter. поэтому основная линия партии - это как раз императивные циклы и в целом императивная обработка. на это намекает даже то, что все эти map/filter/reduce не принимают iterable/Traversable, а требуют массивы. это прям охуенно огромные светящиеся красные буквы "чуваки, пхп для этого не предназначен, оно вам не нужно". плохо это или хорошо - отдельный вопрос, но прямо сейчас положение вещей такое, и, на мой взгляд, глупо против него переть
Просто пхп развивается очень медленно, и древним функциям не уделяют должного внимания. Ничего ведь не мешает дополнить интерфейс указанных тобой функций.
Konstantin
согласен полностью, для меня это тоже выглядит каким-то странно обоснованным уродством
The Ant
Это не красные светящиеся буквы, это просто проеб )
Konstantin
но прямо сейчас это так, и нет особых подвижек в этом вопросе (по крайней мере, судя по дискуссиям у мейнтейнеров/рфцшкам), поэтому я предлагаю писать под текущую версию пхп, с текущими ограничениями
Konstantin
а как починят это (если починят) - велкам, можно всё будет переписать так, как хочется
The Ant
Крч юзать форыч и не выебываться? 😃
Konstantin
мне кажется что да
Konstantin
оно легче, читаемее, управляемее, более php-way
Юра
А сделать его не сервисом не?
Юра
Нафига он сервис
Юра
Он зависит от чего-то?
Юра
Блин я написал статический метод в ErrorHelper классе и забыл про эту проблему давно. У тебя же простыня нытья на три разворота экрана
The Ant
Юра
Кто это сказал
Юра
А сервисы которые не зависят ни от чего это антипаттерн
The Ant
это раз, а во вторых, он должен вернуть свой резалт сет, иначе как проверить есть там ошибки или нет?
Юра
1-1
The Ant
Konstantin
как только понадобится тебе условный логгер в хелпер добавить, всё, пока, весь код менять придется
Юра
Условный логер в хелпере не нужнн
Юра
Это хелпер
Konstantin
ну сейчас не нужен, а завтра понадобилось
Юра
Если там логер это не хелпер а сервис
Konstantin
сервис ничего не стоит, минусов не имеет, а плюсов заведомо больше
Юра
Тогда пишите сервис и не еб..те мозги
Юра
Анту стоит
Юра
Ему впадло писать аргумент
The Ant
да, это ж читать потом надо будет )
The Ant
меньше букв парсить головой - лучше настроение в конце рабочего дня
Юра
А вообще идея
Юра
Просто сделай форк симфы
Юра
Под себя
Юра
И все
Юра
Добавь прям в форму полученин массива ошибок
The Ant
у меня нет формы, дто и симфонивский валидатор. Формы не нужны! 😄
Юра
Тогда добавь в валидатор )
Юра
Даже не всю симфу надо форкнуть а один компонент
The Ant
это уже черезчур :D
Konstantin
а не хочешь попробовать какую-то мидлварь сообразить, что это делает один раз?
Konstantin
я разделяю твое негодование тем, что во все экшны придется один и тот же код носить
Konstantin
особенно, если понадобится изменить структуру ответа по какой-то причине
The Ant
будет сложно, иногда надо ошибки по полям, иногда в виде списка простого. Всё единое не проканает
Konstantin
а может вообще всё в хелпер унести? и пусть он возвращает JsonResponse с нужными полями?
Konstantin
ты ему передал некий женерик-параметр $data - он ее повалидировал и вернул ответ?
Konstantin
впрочем, сложно гадать, не видя остальных юз-кейсов
Юра
Это делается нормально
Юра
Через сериализатор ошибок
The Ant
возникает вопрос с именованием методов ) я думал над этим, но не придумал как обозвать валидацию и возврат с группировкой по полям, и второй вариант - простым списком
Юра
Просто кидается исключение
Юра
И всеееееее
The Ant
СОЛИДно вроде да? инжеким нужный и радуемся.
Думаю на этом остановлюсь, всем спасибо ❤️
Alexander
Приветствую! У меня здесь закрытый бакет в AWS, поэтому я решил, что на фронт файлы с него буду возвращать через Api. Так с echo все работает, файл отображается. Но я не понимаю, как мне его вернуть со стандартным Symfony Response объектом? Или есть еще какие-то способы?
Konstantin
мне кажется, что тут не надо насиловать пхп (особенно, если файлы будут большими), а взять presigned urls - это такая штука, чтобы из приватных бакетов можно было отдавать файлы клиентам по секретной короткоживущей ссылке
Konstantin
https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/s3-presigned-url.html
Konstantin
но если прям хочется пропустить этот трафик через пхп, то надо сделать что-то вроде https://symfony.com/doc/current/components/http_foundation.html#streaming-a-response
Алексей
BinaryFileResponse
Konstantin
ага, только ссылку на него нёс )
The Ant
Konstantin
судя по content-disposition ему надо прям файлом отдавать картинки, а не в браузер
Alexander
Alexander
Konstantin
это не надо никак настраивать в с3, это прям точно
Konstantin
отдавать секретные файлы через него не имеет большого смысла, они ведь всё равно не кешируются. трафик с CF стоит столько же, сколько из s3
Alexander
Alexey Mishurovskiy
Всем привет! а как сделать так, чтобы мессенджер симфы, когда создавал очередь в кролике делал ее реплицируемой ?