The Ant
Kirill
Маладес! Выше уже всё обсудили)))
The Ant
да закопали в жопу кудато )
Shokha
Добрый день) У меня есть такая правила security.yaml - { path: ^/api/*, roles: [ROLE_ADMIN, ROLE_SELLER] } по сути тут сказано если путь начинается /api тогда доступно к этим ролям как эту правилу поменять чтобы если это ПУТ не /api то тогда работал это правила типа !true
Kirill
Всем привет! Подскажите, пожалуйста, в чем может быть проблема? Раньше все миграции лежали в одной директории, я добавил в doctrine_migrations.yaml строку organize_migrations: BY_YEAR и существующие миграции вручную разложил по директориям. Теперь если запускаю doctrine migrations migrate, получаю ошибку The version "latest" couldn't be reached, there are no registered migrations.
Kirill
странность в том, что если я добавляю еще одну миграцию d : m : g и потом вызываю d : m : m, то все работает как надо
Kirill
да, все работает и в базе с ними ничего не нужно делать, в таблице с миграциями они по-прежнему без года
Kirill
да, d : m : g создает файл с миграцией в директории 2023, но после выполнения в таблице год не фигурирует
Павел
да, d : m : g создает файл с миграцией в директории 2023, но после выполнения в таблице год не фигурирует
Понятно, странно, вроде это название - неймспейс, а вы его сменили. Надо грянуть что в проекте где это сразу было.
Павел
Да, я ошибся. Миграции не по пср4 лежат а в одном неймспейсе независимо от директории
Kirill
нашел ошибку, при переносе в директории, шторм удалил у файлов неймспейc)
Kirill
/** * @Route("/users/{id<^\d+$>}", methods={"GET"}) * * @SWG\Response( * response=200, * description="Объект DTO", * @SWG\Schema(ref=@Model(type=UserDTO::class)) * ) */ public function getByEmployee(?User $$user): View { if ($user === null) { throw new NotFoundHttpException('Пользователь не найден'); } } Подскажите, пожалуйста, можно ли как-то тут избавиться от проверки на null, когда параметр конвертируется в сущность?
Kirill
действительно, а можно как-то кастомизировать ее? тут вот так App\\Entity\\User object not found by the @ParamConverter annotation.
George
действительно, а можно как-то кастомизировать ее? тут вот так App\\Entity\\User object not found by the @ParamConverter annotation.
Listener сделать и перехватывать конкретно эту ошибку и выдавать то что тебе нужно… Как вариант
The Ant
Message: "An exception occurred while executing 'DELETE FROM messenger_messages WHERE id = ?' with params ["389266"]: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction" серьезно? в мессенжере дедлоки?! 😄 дилетанты ебучие
The Ant
сам в шоке )
The Ant
несколько воркеров на 1 табличку
Anton
Я сейчас так собрался сделать)))
Anton
Завтра сяду писать)
Anton
Крепко задумался)))
The Ant
нада лезть в исходники, там походу пчёлы не в курсе про select ... for update skip locked
Anton
нада лезть в исходники, там походу пчёлы не в курсе про select ... for update skip locked
Завтра гляну как оно там, крааайне интересно. Блин, для mvp не хочется кролика тащить (
Alexey Mishurovskiy
Парни, как заставить serializer не использовать геттеры ?
Alexey Mishurovskiy
есть дтошка с публичными свойствами. и есть некий уничерсальный интерфейс, который унифицирует некую группу ДТОшек в нем геттеры, они могут как пересекаться с именами полей так и не пересекаться.
Alexey Mishurovskiy
то есть внешний код у DTO вызывает например getCountry() а внутри это может быть : getCountry(){ return $this->country } или getCountry(){ return $this->countryName } и так далее, в зависимости от апишки которая используется
Alexey Mishurovskiy
в MetadataFactory есть кусок который метадату обрабатывает Причем самое интересное, что он обрабатывает ее последним
The Ant
Парни, как заставить serializer не использовать геттеры ?
не делать геттеры? юзай дто с инициализацией через конструктор с ридонли свойствами
The Ant
ну будут публичные свойства, что изменится?
Alexey Mishurovskiy
я заранее не знаю, какая именно ДТОшка придет
Alexey Mishurovskiy
они содержат +\- одинаковые данные, но нейсинг поле может и отличаться. поэтому и геттеры ы интерфейсе
The Ant
ты понимаешь зачем ты используешь геттеры и приватные поля?
Alexey Mishurovskiy
поля публичные
The Ant
тогда зачем геттеры? )
Alexey Mishurovskiy
они содержат +\- одинаковые данные, но нейсинг поле может и отличаться. поэтому и геттеры ы интерфейсе
за этим, чтобы сервис получив SomeDtoInterface знал как достать из него данные
The Ant
без геттеров сервис не знает как получить данные из публичных полей? странный сервис
The Ant
подскажу: $bar = $foo->bar;
Alexey Mishurovskiy
без геттеров сервис не знает как получить данные из публичных полей? странный сервис
еще раз - есть структуры, которые приходят из разных API они в целом одинаковые по данным, но поля могут чуть отличаться по неймингу
Alexey Mishurovskiy
и есдиная точка входа, которая это сохраняет в бд
The Ant
какое это имеет значение? ставь атрибуты для сериалайзера, чтобы разруливал имена
Юра
Значит нужна дто адаптер
Юра
)
Alexey Mishurovskiy
интерфейс прекрасно подходит для решения этой задачи
Alexey Mishurovskiy
но сериалайзер оказался не достаточно гибким, как хотелось бы.
Alexey Mishurovskiy
примерно так это выглядеть должно Либо делать еще один промежуточный DTO который будет собираться в каждом из классов и возвращать его
The Ant
интерфейс прекрасно подходит для решения этой задачи
https://pastebin.com/EcAK9JKs универсальный аргумент резолвер для жсон риквестов Пустой интерфейс нужен только чтобы помечать для резолвера дточки, что можно десериализовать их другие интерфейсы не нужны
The Ant
какую ты там задачу решаешь при помощи геттеров с наличием публичных полей у дто решительно не понятно
Alexey Mishurovskiy
какую ты там задачу решаешь при помощи геттеров с наличием публичных полей у дто решительно не понятно
Сервис получает некий объект, который реализует интерфейс, просто так сложилось, что методы интерфейса это геттеры по немингу
The Ant
не проще ли на одну дто мапить?
Alexey Mishurovskiy
есть 3 апишки, которые отдают +\- одни и те же данные. у каждой апишки соответственно свои ДТОшки в которые десериализуется JSON Так вот я хотел без промежуточной ДТОшки сделать интерфейс и чтобы сервис мог забирать даынне из любой из этих дтошек, даже не знаю откуда он что берет
The Ant
либо мапить ответ апи на дто для сервиса чето типа $dto = new ServiceDto(...(array) $apiDto); и засылать в сервис
Alexey Mishurovskiy
Скорее всего так и сделаю
Павел
Парни, как заставить serializer не использовать геттеры ?
ObjectNormalizer использует get* методы. Если вам нужен доступ к свойствам, но при этом чтобы их не юзал сериалайзер - сделайте просто метод с другим названием, который не начинается с get. Так же есть ignore атрибут, но не факт что он работает с методами
Vlad
https://github.com/symfony/serializer/blob/6.2/Annotation/Ignore.php#L23
Vlad
\Attribute::TARGET_METHOD
Alexey Mishurovskiy
ObjectNormalizer использует get* методы. Если вам нужен доступ к свойствам, но при этом чтобы их не юзал сериалайзер - сделайте просто метод с другим названием, который не начинается с get. Так же есть ignore атрибут, но не факт что он работает с методами
Переименование методов единственный вариант.. Игнор работает не так как я ожидлал: Допустим есть поле в классе $phone и метод в интерфейсе getPhone() Так вот если Игнор повесить в интерфейсе, все равно проигнорируется поле целиком
Alexey Mishurovskiy
я вчера глубоко это прокопал с дебаггером
Юра
Мне кажется проще сделкть свой нормалайзер
The Ant
dbal вообще умеет автоматом декодить жсон? не в сущностях, а который коннект
Павел
dbal вообще умеет автоматом декодить жсон? не в сущностях, а который коннект
Что значит декодить? ТИпо чтобы у тебя на выходе был массив?
Павел
Поидее можно сделать свою обертку (Фесор пару раз кидывал), которая работае с pdo т.е. проваливается из абстракции в реализацию. Там получить тип поля, которое вернуло stmt и делать что угодно с ним
Павел
Например те же tinyint превращать в bool , время в datetime, а json наверное получится в массив
Павел
https://www.php.net/manual/en/pdostatement.getcolumnmeta.php
Павел
Но это надо свою обертку
The Ant
свой гидратор чет не улыбается писать )
The Ant
мне чет казалось дбал такое умеет
Павел
мне чет казалось дбал такое умеет
Там проблема в том, что дбал это абстракция, а не все абстракции могут получить такие данные
Павел
Они поэтому отказались от гитрации на кастомный объект, так как это умеет только пдо
The Ant
а по дефолту юзается пдо? м.б. если поставить он сделает? )
Павел
The Ant
🤷‍♂️
Павел
а по дефолту юзается пдо? м.б. если поставить он сделает? )
Но в целом тот минимапер небольшой, я писал. Просто не нравится проваливаться в реализацию. Но удобно, рили