Дмитрий
вернее понятно что можно вручную вызвать все геттеры и отдать результат в сеттеры, но может есть какой более быстрый и удобный способ
Дмитрий
5.4
Ivan
А почему не хотите User implements UserInterface?
Nikolay
5.4
Вообще в доке видел по секурити. Делают обёртку над юзером и ее используют
Nikolay
не понял
Вероятно про имплемент в сущности говорит, как раз про костыль
Alexey Mishurovskiy
а что в этом костыльного ?
Дмитрий
дак ентити итак такая class User implements UserInterface
Nikolay
а что в этом костыльного ?
В сущность юзера добавляются какие то стремные методы
Ivan
Что в этом костыльного?
Дмитрий
maker:user сам создает
Nikolay
Доменная сущность не должна ничего имплементить
Nikolay
Появляются какие то методы getSault, и тд
Александр
Это же не костыль, а базовая функция, ибо все функции symfony по вытаскиванию юзера ожидает что вернутся интрефейс же.... По крайней мере в 6 версии почти везде так
Ivan
У меня правда свой UserInterface, но он наследуется от того UserInterface
Ivan
И проблем нет
Alexey Mishurovskiy
В сущность юзера добавляются какие то стремные методы
то есть а 100500 ненужных астракция это не стремно ?
Иван
не надо мешать явно доменную сущность и аутентификацию
Дмитрий
Это же не костыль, а базовая функция, ибо все функции symfony по вытаскиванию юзера ожидает что вернутся интрефейс же.... По крайней мере в 6 версии почти везде так
дак вот мне непонятно почему maker при создании других ентити при связи с User ставит ее в ожидание а не интерфейс, хотя User имплементит интерфейс и мейкер должен это был увидеть
Nikolay
https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider
Дмитрий
никогда не использовал мейкер и теперь точно не буду
а я думаю неужели только у меня такая проблема )) теперь понятно ))
Иван
это ж быренько наговнякать, а потом некоторые думают, что это лучшие практики
Nikolay
это настроено
UserProvider напрямую тянет сущность?
Дмитрий
это ж быренько наговнякать, а потом некоторые думают, что это лучшие практики
вот так сюрприз сюрприз, maker не бест практис, мой мир никогда не будет прежним ((
Дмитрий
UserProvider напрямую тянет сущность?
дак там еще прослойка из ApiPlatform которая сама по себе большой такой черный ящик
Дмитрий
пока что я вижу как быстрое решение это в ентити Project поменять User на UserInterface потому что считаю что так правильнее
Nikolay
вот так сюрприз сюрприз, maker не бест практис, мой мир никогда не будет прежним ((
Предложу такой вариант. Делаешь UserProvider который возвращает не сущность а отдельный класс юзера для аутентификации
Nikolay
Который как раз имплементит интерфейс UserInterface
Дмитрий
Предложу такой вариант. Делаешь UserProvider который возвращает не сущность а отдельный класс юзера для аутентификации
дак аутентификация уже пройдена, мне надо создать сущность Project и ей передать того юзера под которым произошла аутентификация, вот я достал этого юзера из секьюрити, но там UserInterface пока что из всего обсуждения я понял что maker говно и подложил мне свинью
Дмитрий
секьюрити как раз и возвращает UserInterface тут вопросов нет, а вот maker делает связь по App\Entity\User а не по UserInterface на самом деле оба правы, потому что я ведь мог в ентити User добавить новых свойств и методов
Дмитрий
$user = $security->getUser() if (!$user instanceof User) { throw new ... // User not instance of User logic } $project->setUser($user);
и как это решит проблему? $security->getUser() возвращает UserInterface а $project->setUser($user); ждет App\Entity\User
Anton
вот именно эту проблему это и решает
Anton
реализаций UserInterface может быть сколько угодно, но могут быть участки кода в которые умеют работать с определёнными/разными/всеми и т.д
Anton
в данном случае пока чисто обозначить для IDE и статических анализаторов что здесь может быть только App\Entity\User, если потом ещё что-то появится то на тестах либо упадёт и нужно будет ещё что-то придумывать либо не упадёт и значит всё оки
Дмитрий
до меня дошло ) /** * @var \App\Entity\User $user */ $user = $this->security->getUser(); $data->setUser($user); да, в таком виде шторм перестал ругаться
Anton
как вариант
Дмитрий
но это костыль, но рабочий, тем более для связи все равно Doctrine использует только идентификатор записи
Дмитрий
будет работать до тех пор пока в голову не стукнет использовать метод или свойство которого нет в UserInterface
Дмитрий
спасибо всем за помощь, но странно что симфони не умеет получать именно App\Entity\User который прошел аутентификацию
Дмитрий
нет, даже в этом случае будет работать
потому что секьюрити все таки возвращает ентити User?
Anton
пока да
Anton
пока один user provider
Nikolay
class User implements UserInterface, PasswordAuthenticatedUserInterface зачем в доке такому учат, непонятно
Дмитрий
пока один user provider
понятно, спасибо
Дмитрий
class User implements UserInterface, PasswordAuthenticatedUserInterface зачем в доке такому учат, непонятно
не разрушайте мои детские фантазии про то что симфони лучший фреймворк в php ))
Anton
https://symfony.com/doc/current/security/user_providers.html
Дмитрий
https://symfony.com/doc/current/security/user_providers.html
да, теперь до меня дошло как оно там под капотом работает и за что эта запись отвечает
Adilet
Всем привет. Знает кто-нибудь как можно исправить генерацию миграции доктрины, когда используешь mysql? Появляется лишняя строчка запроса в секции down с изменением кодировки таблицы, не до конца понимаю. И при чем с каждой генерацией он предыдущую табличку хочет поменять. Код: https://pastebin.com/TBZwPuUS
Adilet
почему думаешь что он не нужен? что показывает DDL этой таблицы в БД?
Вот структура таблицы в БД. Не сильно понимаю, что подразумевает "DDL этой таблицы". https://pastebin.com/jZAHRTpT
Дмитрий
Вот структура таблицы в БД. Не сильно понимаю, что подразумевает "DDL этой таблицы". https://pastebin.com/jZAHRTpT
как будто бы где-то в ранних миграциях были какие-то правки и они отсутствуют в down вот он их и принес, не может же он выдумать команды для down значит после анализа прошлых миграций он нашел что-то такое из-за чего решил написать такой down
Adilet
как будто бы где-то в ранних миграциях были какие-то правки и они отсутствуют в down вот он их и принес, не может же он выдумать команды для down значит после анализа прошлых миграций он нашел что-то такое из-за чего решил написать такой down
Я вообще ничего не менял от миграции к миграции. Я начал новый проект, затем создавал сущности и генерил миграцию. Затем опять новые сущности и миграция. И вот на второй и последующей миграции он хочет в down изменить предыдущие таблицы. Хотя опять же я ничего не изменял в маппингах, а просто добавлял (сущности, колонки, связи). Я вот думаю может есть какой-то пункт в конфиге доктрины, где можно было бы указать про кодировку. Но не могу найти(
Дмитрий
если проект прям совсем новый и до прода не дошел, тогда проще грохнуть все миграции и снова сгенерить но уже в виде одного файла, профит
Adilet
а сами миграции корректировали после накатывания? ещё можно почистить кэш попробовать
Миграции вообще не менял, просто проверял, норм ли сгенерилось и все
Adilet
Я обычно на постгресе работал просто, там такой херни не было
Anton
rm -rf var/cache && bin/console doctrine:migrations:diff
Anton
Я обычно на постгресе работал просто, там такой херни не было
ну там есть CREATE SCHEMA public, но вопрос решаемый)
Дмитрий
@t_adil смотри как будто как у тебя?
Adilet
ну там есть CREATE SCHEMA public, но вопрос решаемый)
С этим знаком да) Но тут уже кодировка и я че-то не могу нагуглить ничего
Adilet
rm -rf var/cache && bin/console doctrine:migrations:diff
Вот что сгенерилось https://pastebin.com/82mDUdSa
Adilet
Там вот те 3 таблицы, которые он хочет изменить в down
Adilet
У меня симфони 4.4
Adilet
Кстати, забыл сказать. Я работаю в докере и php и mysql лежат в разных контейнерах. Может ли в этом быть дело?
Anton
doctrine: dbal: default_table_options: charset: utf8 collate: utf8mb4_unicode_ci
Anton
а с таким конфигом?
Adilet
doctrine: dbal: default_table_options: charset: utf8 collate: utf8mb4_unicode_ci
Все равно записывает в down ненужные миграции
Nikolay
Хай, все отсюда убегаеют? https://t.me/symfony_php )
Nikolay
Я сейчас тоже вычищаю ручками. Но блин такое себе это дело(
Привыкай. Я полтора года с этой херней боролся, так и не поборол, забил. Просто каждый раз миграции чекаю после генерации и выпиливаю всё лишнее руками(