ꗇ
я помню, что всё было настолько незначительно, что в итоге на слим не пересел, остался на симфе.
Dmitriy
Dmitriy
ХЗ с лисерами тоже норм
Kirill
Kirill
Вот у тебя, допустим, сервер сайт эвентс, один запрос и много ответов
Kirill
Как это через миддлвари сделать?
Kirill
Хотя можно один ответ, конечно, и даже наверное лучше
Kirill
Всё же миддлвари синхронные, один запрос - один ответ. Это удобно и подходит для 99% случаев
Kirill
Но когда параллелить придётся или на один запрос не один ответ - тогда веселуха
Kirill
С другой стороны http psr помойка сраная, так что всё что угодно лучше, нежели psr)
Nikolay
Kirill
Я не про код, я про архитектуру и удобство
Kirill
Архитектурно хттп кернел симфы лучше
Kirill
По крайней мере там квери параметры в одном месте, а не в двух разных)
Kirill
И хедеры в одном месте, а не в 3х разных местах
Михаил
Ну у мидваров тоже есть плюсы. Их можно на определённый контекст навесить и всё.
Я щас работаю с легаси монолитом (ещё на бандлах) решил бахнуть http листенер для проверки сигнатуры запроса.
Ну и ясен красен он работает на всех бандлах, во всех запросах. Приходится изголяться с доп проверками внутри листенера
Михаил
А миддлввру на группу роутов кинул и в путь. Не страшно
Vlad
Vlad
так этот иф ничего не стои же, там затраты на эту проверку даже не копейки по времени
Михаил
Если сайт по продажи памперсов - то да.
Михаил
Или если 100 эндпоинтов нужны без подписи, а один-два с подписью
Kirill
Сергей
Добрый день.
Кто-нибудь может подсказать, как настроить normalize, чтобы он не менял регистр в строке?
SK
#lest
Как пишете логику отдачи повторяющихся структур данных во многих запросах. Например json объект профиля нужно отдавать в едином виде во многих эндпоинтах, так как на клиенте эта структура типизирована через TS. Я создал отдельный хелпер класс с методом prepareProfile в который я передаю интерфейс юзера и он из этого составляет массив с полями который прописаны на клиенте, внутри prepareProfile также идет обращение к другим таким же методам prepare например корзины или других таких данных который тоже типизированы на клиенте и со всех всех эндпоинтах нужно отдавать в одном виде чтобы название полей и их типы данных совпадали. Вопросу к тому что нормально ли так делать, может есть более приемлемый способ
Павел
А так же посмотреть текущие настройки
Михаил
Павел
Михаил
Но нащёт сериализатора. С другой стороны есть тесты, так что он тоже норм. Но управлять отрисовкой через слова в атрибутах, кажется странным
Михаил
А ещё, что бы не парится с вложенностью и контекстной отрисовкой, можно глянуть в сторону json api
Не надо его полностью реализовывать, но можно посмотреть на те принципы, которыми эта спека пользуется для респонсов
SK
The Ant
Ярослав
Kirill
Kirill
1) Он гибче
2) Он удобнее
3) Он стабильнее (на порядки меньше багов)
4) Он лучше написан
5) И на порядки быстрее (я сильно старался оптимизить свой сериалайзер, но так и не удалось его догнать, см. бенчи https://github.com/php-type-language/mapper?tab=readme-ov-file#denormalization)
Vlad
Kirill
Он это как property path рассматривал с какого-то перепуга
Kirill
Ну или вот такое тоже весело:
$serializer = new \Symfony\Component\Serializer\Serializer([
new \Symfony\Component\Serializer\Normalizer\ObjectNormalizer(),
]);
class Example
{
public function __construct(
public string $value,
) {}
}
$result = $serializer->denormalize(['value' => [1, 2, 3]], Example::class);
Kirill
PHP Fatal error: Uncaught TypeError: Example::__construct(): Argument #1 ($value) must be of type string, array given
Kirill
А ожидаю я что-то вроде такого (это пример из другого сериалайзера): Passed value in "value" of Example{value: string} must be of type string, but [1, 2, 3] given at $.value
Kirill
А как тебе такое?
class Example
{
public function __construct(
public string $value,
) {}
}
$result = $serializer->denormalize([
'value' => 'asd',
'value.0' => [1, 2, 3],
], Example::class);
>>
PHP Fatal error: Uncaught Symfony\Component\PropertyAccess\Exception\UnexpectedTypeException: PropertyAccessor requires a graph of objects or arrays to operate on, but it found type "string" while trying to traverse path "value.0" at property "0". in /home/serafim/local/type-language/libs/mapper/bench/vendor/symfony/property-access/PropertyAccessor.php:328
Kirill
Мне стоит объяснять почему это может быть потенциально фатальной уязвимостью, учитывая как любят маппить типы на энтити? Т.к. денормалайзер имеет прямой доступ к любому вложенному объекту, используя property path
Nikolay
Anonymous
Зpaвcтвyйтe.Предлагаю удаленная работу Oт 200 $ в дeнь.
Количество мест ограничено Зa пoдpoбнocтями пиши плюс в лс
Anonymous
Зpaвcтвyйтe.Предлагаю удаленная работу Oт 200 $ в дeнь.
Количество мест ограничено Зa пoдpoбнocтями пиши плюс в лс
Михаил
оп - ретраи пошли)
Павел
Но там проблема с неймингом вроде как. Но не 500 ошибка
Kirill
Anonymous
Зpaвcтвyйтe.Предлагаю удаленная работу Oт 200 $ в дeнь.
Количество мест ограничено Зa пoдpoбнocтями пиши плюс в лс
Kirill
Павел
ничосе, они починили
Это не точно, но мне кажется примерно каждые полгода это обсуждается тобой))
Kirill
Kirill
Мы обсуждаем раз в пол года сериалайзер. Я его пробую, нахожу говно и выкидываю. Потом ты говоришь что починили, я радуюсь, потом нахожу новое
Kirill
И так по-кругу)
Павел
))))
Dmitry
Dmitry
или какие альтернативы ? json_decode ?
Kirill
Kirill
а так-то везде JMS уже
Kirill
у JMS только одна проблема - требуется для array типы явно прописывать
Павел
Почти на всех проектах. MapRequest симфы -тоже на нем
Павел
Возможно я просто не извращаюсь с контрактами апи))
Kirill
ну в моём случае это сообщение + path
Павел
Единственное что - не юзаю конструкторы на дто, потому что он плохо ошибки пишет, как раз в твоем первом примере
Kirill
не, они это починили)))
Kirill
года 3 назад, да, там в зависимости от того какой у тебя конструктор - совершенно разное поеведение
Павел
Павел
Но уже не помню что
Павел
Не критично было, но меня не устроило