Kirill
Маладес! Выше уже всё обсудили)))
The Ant
да закопали в жопу кудато )
Shokha
Добрый день)
У меня есть такая правила security.yaml
- { path: ^/api/*, roles: [ROLE_ADMIN, ROLE_SELLER] }
по сути тут сказано если путь начинается /api тогда доступно к этим ролям
как эту правилу поменять чтобы если это ПУТ не /api то тогда работал это правила
типа !true
Gleb
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, но после выполнения в таблице год не фигурирует
Павел
Да, я ошибся. Миграции не по пср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
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"
серьезно? в мессенжере дедлоки?! 😄 дилетанты ебучие
Anton
The Ant
сам в шоке )
The Ant
несколько воркеров на 1 табличку
Anton
Я сейчас так собрался сделать)))
Anton
Завтра сяду писать)
Anton
Крепко задумался)))
The Ant
нада лезть в исходники, там походу пчёлы не в курсе про select ... for update skip locked
Anton
Alexey Mishurovskiy
Парни, как заставить serializer не использовать геттеры ?
Alexey Mishurovskiy
есть дтошка с публичными свойствами. и есть некий уничерсальный интерфейс, который унифицирует некую группу ДТОшек в нем геттеры, они могут как пересекаться с именами полей так и не пересекаться.
Alexey Mishurovskiy
то есть внешний код у DTO вызывает например getCountry()
а внутри это может быть :
getCountry(){
return $this->country
}
или
getCountry(){
return $this->countryName
}
и так далее, в зависимости от апишки которая используется
Alexey Mishurovskiy
в MetadataFactory есть кусок который метадату обрабатывает
Причем самое интересное, что он обрабатывает ее последним
Alexey Mishurovskiy
The Ant
ну будут публичные свойства, что изменится?
Alexey Mishurovskiy
я заранее не знаю, какая именно ДТОшка придет
Alexey Mishurovskiy
они содержат +\- одинаковые данные, но нейсинг поле может и отличаться. поэтому и геттеры ы интерфейсе
The Ant
ты понимаешь зачем ты используешь геттеры и приватные поля?
Alexey Mishurovskiy
поля публичные
The Ant
тогда зачем геттеры? )
Alexey Mishurovskiy
The Ant
без геттеров сервис не знает как получить данные из публичных полей?
странный сервис
The Ant
подскажу: $bar = $foo->bar;
Alexey Mishurovskiy
и есдиная точка входа, которая это сохраняет в бд
The Ant
какое это имеет значение? ставь атрибуты для сериалайзера, чтобы разруливал имена
Юра
Значит нужна дто адаптер
Юра
)
Alexey Mishurovskiy
интерфейс прекрасно подходит для решения этой задачи
Alexey Mishurovskiy
но сериалайзер оказался не достаточно гибким, как хотелось бы.
Alexey Mishurovskiy
примерно так это выглядеть должно
Либо делать еще один промежуточный DTO который будет собираться в каждом из классов и возвращать его
The Ant
интерфейс прекрасно подходит для решения этой задачи
https://pastebin.com/EcAK9JKs
универсальный аргумент резолвер для жсон риквестов
Пустой интерфейс нужен только чтобы помечать для резолвера дточки, что можно десериализовать их
другие интерфейсы не нужны
The Ant
какую ты там задачу решаешь при помощи геттеров с наличием публичных полей у дто решительно не понятно
The Ant
не проще ли на одну дто мапить?
Alexey Mishurovskiy
Alexey Mishurovskiy
есть 3 апишки, которые отдают +\- одни и те же данные. у каждой апишки соответственно свои ДТОшки в которые десериализуется JSON
Так вот я хотел без промежуточной ДТОшки сделать интерфейс и чтобы сервис мог забирать даынне из любой из этих дтошек, даже не знаю откуда он что берет
The Ant
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
Alexey Mishurovskiy
я вчера глубоко это прокопал с дебаггером
Юра
Мне кажется проще сделкть свой нормалайзер
The Ant
dbal вообще умеет автоматом декодить жсон?
не в сущностях, а который коннект
Павел
Павел
Поидее можно сделать свою обертку (Фесор пару раз кидывал), которая работае с pdo т.е. проваливается из абстракции в реализацию. Там получить тип поля, которое вернуло stmt и делать что угодно с ним
Павел
Например те же tinyint превращать в bool , время в datetime, а json наверное получится в массив
The Ant
Павел
https://www.php.net/manual/en/pdostatement.getcolumnmeta.php
Павел
Но это надо свою обертку
The Ant
свой гидратор чет не улыбается писать )
The Ant
мне чет казалось дбал такое умеет
Павел
Они поэтому отказались от гитрации на кастомный объект, так как это умеет только пдо
The Ant
а по дефолту юзается пдо? м.б. если поставить он сделает? )
Павел
The Ant
🤷♂️