Konstantin
если это запрос через DQL/QueryBuilder - то должно быть всё в порядке, тк они этот каст в/из бинарного представления в себе скрывают (собственно для того и нужны)
Павел
Жаль что нельзя у симфони типа указать как генерить
Павел
Ну или что там придется
Konstantin
всё, я понял проблему: речь вообще не про уид-генератор, просто вместе с либами идет какая-то интеграция с доктриной, которую он заюзал. нет никакого обязательного правила, заставляющего это юзать
The Ant
Ну или что там придется
uuid::fromBinary($bin)->toRfc...()
The Ant
Мрак
а датувремя кастишь? или отдаешь как есть? я вот привожу в нормальный вид по исо
The Ant
тоже дичь выходит
Павел
а датувремя кастишь? или отдаешь как есть? я вот привожу в нормальный вид по исо
Приходится тоже, но даты время не везде, а вот id вечзде почти и не по одной штуке
Павел
Плюс выходит еще больше на uuid компоненте завязка
The Ant
ну функцию написать
Konstantin
могу посоветовать написать свой тайп всё же, это строчек 20 с импортами
Konstantin
назвать его uud_text например
The Ant
чем это поможет на чтении?
Konstantin
там два метода реализовать
Konstantin
тем что у него в базе будет не binary(16) а char(36)
Павел
чем это поможет на чтении?
Ну варчар например сделать для него
Konstantin
то есть храниться будет строковое представление, да, а не бинарное
The Ant
так можно сразу стринг сделать, чо мучаться? )
Павел
Да проще тогда text guid и не париться))
Konstantin
так можно сразу стринг сделать, чо мучаться? )
не совсем выйдет, у него же в сущностях код оперирует ValueObject-ом этого UUID
Павел
Я просто чет вот особо тоже не пойму профита между VO общим одним для id и стрингой
Konstantin
то есть когда идет инсерт, доктрина заноет "не могу объект ууида в строку загнать". и обратно - чтобы из строки в поле сущности загнать инстанс UUID, а не строку
Konstantin
Не оперировать да и все
а как вы себе вставку тогда представляете?
Konstantin
тогда нужен custom id generator, который сгенерит криптографически-верный ууид, но отдаст его строкой, а не объектом
Konstantin
Вставку чего?
сущности, ну чего ещё 🙂
Konstantin
бля
Konstantin
минуту, я код пишу с демонстрацией
The Ant
напиши функцию uuidb2s и всё )
Konstantin
берем пример из доки
Konstantin
class Product { /** * @ORM\Id * @ORM\Column(type="uuid", unique=true) * @ORM\GeneratedValue(strategy="CUSTOM") * @ORM\CustomIdGenerator(class=UuidV4Generator::class) */ private string $id; } $p = new Product(); $em->persist($p); $em->flush(); выполняем его и получаем ошибку: все генераторы (в частности UuidV4Generator) вернут не строчку, а инстанс уида этого несчастного
Konstantin
поэтому нам нужен такой генератор, который сделает всё то же самое, ток в конце вернет return $uuid->toString() (сейчас там просто return $uuid)
Konstantin
Я генерю снаружи
тогда я вообще не понимаю за каким дьяволом вы пишете type="guid" а не type="string", length=36
Konstantin
оно же вам никаких абсолютно плюсов не даёт, о чем мы тогда тут час трём, если задача не стоит выеденного яйца?
Павел
Konstantin
зачем вам там во, если вы везде собираетесь оперировать стрингами? и если вы все равно руками делаете setUuid($uuid) - что мещает сделать setUuid($uuid->toString()) ?
Konstantin
ну либо таки тайп uuid_text напишите и будет счастье, там реально 20 строчек и 10 минут
The Ant
а как по мне лучче кастить в строку на отдачу. Один хер делаешь каст всё остальное в требуемое
Konstantin
с одной стороны да, с другой чем больше типов - тем лучше
Konstantin
твой замечательный долбоколлега не врубится и засунет тебе вместо уида "123", ведь тайп-хинт просто просит строку (а какую именно - не говорит)
Konstantin
а у тебя потом всё падать будет потому что 123 в виде уида никак представить нельзя
Konstantin
ну либо таки тайп uuid_text напишите и будет счастье, там реально 20 строчек и 10 минут
https://symfony.com/doc/current/doctrine/dbal.html#registering-custom-mapping-types дока, если чо
Magzhan
Добрый день, коллеги. хочется сразу в конструктор писать не используя setUser
Vlad
client это сервис?
Magzhan
Да
Vlad
https://stackoverflow.com/a/7682827
Иван
не надо так делать код должен быть готов к неумиранию
Иван
это просто разные степени долженствования
Иван
текущий юзер - это не зависимость, а контекст
Konstantin
текущий юзер - это не зависимость, а контекст
ни убавить, ни добавить. никакие внешние данные не должны быть частью сервиса, кешироваться в его полях итд
Magzhan
не надо так делать код должен быть готов к неумиранию
значит по-вашему лучше через setUser добавить данные в сервис?
Nikolay
значит по-вашему лучше через setUser добавить данные в сервис?
В метод где он используется прокинуть через аргумент
Иван
значит по-вашему лучше через setUser добавить данные в сервис?
только если он будет иммутабельный и с привязкой юзера будет клон создаваться
Иван
а так надо передавать аргументом
Konstantin
и не делать setUser
Magzhan
https://stackoverflow.com/a/7682827
этот вариант не подходит так как пользователь может быть не залогиненным и тогда там нулл будет
Konstantin
https://stackoverflow.com/a/7682827
#[CurrentUser] $user = null
Konstantin
современный способ https://symfony.com/blog/new-in-symfony-5-2-controller-argument-attributes
Vlad
так ето работает в экшене)
Konstantin
ну а сервис ничего не должен знать про сессии, юзеров и прочее. ему какую сущность дали - он такой и воспользовался
Иван
сервис может консьюмером вызываться и работать из под разных юзеров конечно может быть так, что этот сервис так не вызывается но стоит приучить себя писать все сервисы одинаково
Иван
а #[CurrentUser] $user = null оставлять только в вебовских контроллерах
Konstantin
в консюмере точно сложно понять кто "текущий юзер"
Konstantin
не, это понятно