Павел
Было не очевидо. Я бы листенер ставил, самый надёжный способ
В листенере надо ловить по названию fk потом преобразовать, опять же там вроде не понять что именно мешает (например какой id) хотя мб и есть в сообщении, но опять же парсить из стринга. В целом да, так то вариант, как самая надёжная точка против рейскондишена.
Михаил
проверено много раз
Ну так вы тоже право голоса имеете. Если им будет удобен определённый формат, будет странно делать то, что им неудобно. Но если то, что они предлагают что-нибудь нарушают - то просто придите к компромиссу
Павел
ну такое. Но спасибо!
Геморойненько, но это однозначно самый надёжный способ в борьбе с гонкой (если она есть)
Михаил
В листенере надо ловить по названию fk потом преобразовать, опять же там вроде не понять что именно мешает (например какой id) хотя мб и есть в сообщении, но опять же парсить из стринга. В целом да, так то вариант, как самая надёжная точка против рейскондишена.
Ну там есть 2 способа 1) смотри куда прыгаешь 2) лучше просить прощения чем разрешения Сначала мы в pre remove проверяем все инварианты и если есть что-то кидаем 400 Потом, если ловим исключения от внешнего ключа сообщаем 500 Но то что ты говоришь что что-то парсить нужно, блин у меня такой траблы не было. Приду домой гляну.
Павел
Если делаем и листенер и пре проверку, то листенер можно сделать попроще, лишь бы не 500
Михаил
Геморойненько, но это однозначно самый надёжный способ в борьбе с гонкой (если она есть)
Можно кстати попробовать в метаданные сущности упасть и проитерировать сообщение по внешними ключами из метаданных. Чуть проще должно быть. Там сразу и поле найдёшь
Алексей
Коллеги, подскажите пожалуйста куда можно вставить проверку при авторизации (в админку) чтобы можно было роли проверить?
Вадим
привет! подскажите разницу между PUT и PATCH в апи платформе v3?
Михаил
привет! подскажите разницу между PUT и PATCH в апи платформе v3?
Вероятно такая же как и между put и patch в rest Put - обновление ресурса целиком Patch - частично
Вадим
Вероятно такая же как и между put и patch в rest Put - обновление ресурса целиком Patch - частично
нет. Прошу высказаться только тех кто точно знает, без обид, ну нафига вот это вот.
Михаил
нет. Прошу высказаться только тех кто точно знает, без обид, ну нафига вот это вот.
Ну нафига это вот - это описано в стандартах rest api. В самой доке апи платформа тоже это описано и описано как это конфигурировать
Михаил
Это значит что на данный момент они схожи
Вадим
где описано как конфигурировать?
и что там можно сконфигурировать
Михаил
и что там можно сконфигурировать
https://symfonycasts.com/screencast/api-platform-security/new-put-behavior
Вадим
вопрос про v3
Алексей
Вероятно здесь https://symfony.com/doc/current/security/voters.html
И куда его дальше цеплять? В kernel.controller не хотелось бы, на каждом хите это не нужно. Интересует какой то метод, который срабатывает сразу после авторизации - чтобы токен уже был
Михаил
И куда его дальше цеплять? В kernel.controller не хотелось бы, на каждом хите это не нужно. Интересует какой то метод, который срабатывает сразу после авторизации - чтобы токен уже был
Ну я у себя делал просто. У нас на проекте jwt токен от общей авторизации и мы его обмениваем на токен нашего проекта и когда мы первый токен валидируем я проверяю чтоб человек был админ и тогда создаю токен, иначе 401
Михаил
Ща попробую поискать конкретно код
Михаил
А, я понял. У нас есть авторизация по логину и паролю, но там кастомный контроллер
Вадим
https://symfony.com/doc/current/security.html#authentication-events или вот
Михаил
И куда его дальше цеплять? В kernel.controller не хотелось бы, на каждом хите это не нужно. Интересует какой то метод, который срабатывает сразу после авторизации - чтобы токен уже был
Короче технически у тебя 2 варианта 1) CheckPassportEvent 2) я использую jwt аунтентификатор от лексика и там есть метод loadUser вот там ты можешь проверить
Михаил
Короче технически у тебя 2 варианта 1) CheckPassportEvent 2) я использую jwt аунтентификатор от лексика и там есть метод loadUser вот там ты можешь проверить
2 способ лучше так как ты можешь 1) или ДО загрузки юзера его отсечь (это минус один запрос в бд) 2) или уже после, но иметь больше данных на руках и роли в токене и роли в юзере
Вадим
https://symfonycasts.com/screencast/api-platform-security/new-put-behavior
сорян, пересмотрел, чел говорит что поведение изменится сразу, уже в v3 my bad спасибо
Михаил
сорян, пересмотрел, чел говорит что поведение изменится сразу, уже в v3 my bad спасибо
Но я бы всё равно бы тесты провёл. Я года два назад юзал апи платформ, там полную дичь он творил. От настройки и от того как ты передашь параметр (нулл или просто пустой) совсем разное поведение
Михаил
Напиши функциональные тесты и проверь
Вадим
мне на самом деле как раз эта настройка standard_put = true подходит и понимать я больше ничего не хочу, спасибо что заставил пересмотреть видос
Михаил
Врядли, вообще я удивляюсь что апи платформ пользуются Это такой слон, он и решает проблемы ну и создаёт их. У нас было 10 лбов бекендеров - мы в панике бежали этого (фреймворка???)
Вадим
Врядли, вообще я удивляюсь что апи платформ пользуются Это такой слон, он и решает проблемы ну и создаёт их. У нас было 10 лбов бекендеров - мы в панике бежали этого (фреймворка???)
ну я пока больше видел решений чем проблем, и, кажется, многие проблемы кажутся таковыми из-за недостатка знаний и плохой документации
Вадим
хотя я только начал и у меня ещё всё впереди походу :)
Михаил
хотя я только начал и у меня ещё всё впереди походу :)
В любом случае обмажься тестами. Если в рантайме он, из-за того что ты случайно не ту настроечку указал будет поля удалять - вот это самое не комильфо.
Dmitry
drawDB — это бесплатный и интуитивно понятный инструмент проектирования баз данных и генератор SQL. Пользователи могут создавать диаграммы несколькими щелчками мыши, экспортировать SQL-скрипты и настраивать свой редактор без создания учетной записи. ⤷ Ссылка на проект 📢GitHub | #Tool #Useful #SQL
Vlad
Что это за новая приколюха у плагина симфы для шторма, что ему не нравится)))
Vlad
при передачи сущности в конструктор другой сущности ругается
Михаил
при передачи сущности в конструктор другой сущности ругается
Ну наверное потому что параметры конструктора будут заполнены только при вызове из кода Когда доктрина будет создавать эту сущность при дессериализации из бд то что она должна будет в конструктор запихнуть? (Ред. я имел ввиду что она не учитывает конструктор и возможно ругается на это, но в таком случае это бред и ошибка точно не в этом)
Михаил
Возможно тебе будет интересен приватный конструктор и статические методы-фабрики
Михаил
тогда есть предположение что сущность лежит не там где обычно лежат сущности и плагин думает что это сервис
Михаил
а вообще новый шторм - полная лажа Там вроде был фикс, но в кейсе private UserReposi[КУРСОР ТУТ] $users мы нажимаем таб и ide съедает впереди стоящие слово вставляя то что осталось вставить в автокомплишоне и получается private UserRepositoryers
Михаил
при пролистовании списка не понятно где мы находимся в этом списке
Михаил
есть проблема что если в коде в списках параметров есть комментарий __construct(private UserRepository /*комментарий*/ users) то ide будет ругатся что я передал не верный тип, ведь ожидался UserRepository /*комментарий
Михаил
раньше было лучше и ламповеей. В vim спокойно код пишешь и всё ок, а щас нужно обязательно эти сраные ide ставить, чтоб их создателю икалось
Михаил
доктрина не использует конструктор при гидрации
я просто вспомнил что использовал раньше конструктор для проставления значений по умолчанию (коллекции там итп) Но доктрина видимо сама это заполняла при десериализации а мой конструктор дёргался только при нативном вызове
Виктор
Всем привет! Не очень понимаю, как реализовать следующую логику (или так делать вообще не стоит?). Есть сущность Album. У данной сущности есть свойство thumbnail, представляющее собой ManyToOne с сущностью Photo. Есть форма редактирования альбома. В ней есть поле "Обложка", где отображается ссылка на текущую обложку в виде URI (например https://localhost:3000/photo/Fotografiya-1). Чтобы изменить обложку, нужно, соответственно, просто открыть нужную фотографию, скопировать ссылку и вставить в это поле. Собственно, что мне непонятно. Как правильно обработать юзер-инпут в этом поле? Сперва в buildForm сделал getter и setter для этого поля. В сеттере проверял, что юзер-инпут - это ссылка, парсил её, и пытался найти соответствующее фото. Если репозиторий возвращал не null (фото существует), то всё ок - сущность Photo сохраняю в поле thumbnail. Если нет, то ничего не делаю. Но это как-то криво, нужна же валидация, чтобы пользователь понимал, в чём дело? Ок, сделал валидатор IsPhotoUri. Но затупил и не подумал о том, что значение-то валидируется после того, как маппится в сущность. Получается, нужно дважды валидировать сперва в сеттере, затем в валидаторе? Короче что-то не могу найти конец, за который потянуть, чтобы эту ситуацию распутать. Подскажите, пожалуйста.
Nikolay
Всем привет! Не очень понимаю, как реализовать следующую логику (или так делать вообще не стоит?). Есть сущность Album. У данной сущности есть свойство thumbnail, представляющее собой ManyToOne с сущностью Photo. Есть форма редактирования альбома. В ней есть поле "Обложка", где отображается ссылка на текущую обложку в виде URI (например https://localhost:3000/photo/Fotografiya-1). Чтобы изменить обложку, нужно, соответственно, просто открыть нужную фотографию, скопировать ссылку и вставить в это поле. Собственно, что мне непонятно. Как правильно обработать юзер-инпут в этом поле? Сперва в buildForm сделал getter и setter для этого поля. В сеттере проверял, что юзер-инпут - это ссылка, парсил её, и пытался найти соответствующее фото. Если репозиторий возвращал не null (фото существует), то всё ок - сущность Photo сохраняю в поле thumbnail. Если нет, то ничего не делаю. Но это как-то криво, нужна же валидация, чтобы пользователь понимал, в чём дело? Ок, сделал валидатор IsPhotoUri. Но затупил и не подумал о том, что значение-то валидируется после того, как маппится в сущность. Получается, нужно дважды валидировать сперва в сеттере, затем в валидаторе? Короче что-то не могу найти конец, за который потянуть, чтобы эту ситуацию распутать. Подскажите, пожалуйста.
Не надо делать валидацию в сущности
kakoi-to-noob
Всем привет! Не очень понимаю, как реализовать следующую логику (или так делать вообще не стоит?). Есть сущность Album. У данной сущности есть свойство thumbnail, представляющее собой ManyToOne с сущностью Photo. Есть форма редактирования альбома. В ней есть поле "Обложка", где отображается ссылка на текущую обложку в виде URI (например https://localhost:3000/photo/Fotografiya-1). Чтобы изменить обложку, нужно, соответственно, просто открыть нужную фотографию, скопировать ссылку и вставить в это поле. Собственно, что мне непонятно. Как правильно обработать юзер-инпут в этом поле? Сперва в buildForm сделал getter и setter для этого поля. В сеттере проверял, что юзер-инпут - это ссылка, парсил её, и пытался найти соответствующее фото. Если репозиторий возвращал не null (фото существует), то всё ок - сущность Photo сохраняю в поле thumbnail. Если нет, то ничего не делаю. Но это как-то криво, нужна же валидация, чтобы пользователь понимал, в чём дело? Ок, сделал валидатор IsPhotoUri. Но затупил и не подумал о том, что значение-то валидируется после того, как маппится в сущность. Получается, нужно дважды валидировать сперва в сеттере, затем в валидаторе? Короче что-то не могу найти конец, за который потянуть, чтобы эту ситуацию распутать. Подскажите, пожалуйста.
Если фото только твои загруженые на сервак, то лучше создать таблицу с файлами и ликовать их в сущность Альбом
Виктор
Если фото только твои загруженые на сервак, то лучше создать таблицу с файлами и ликовать их в сущность Альбом
Так у меня уже есть эти данные в самих сущностях Photo. И всё работает норм, проблем с отображением нет. Вопрос же в том, как вообще лучше пользователю предоставить возможность эти обложки менять. Просто через <select> сущности - такое себе, поскольку фотографий несколько десятков тысяч, сложно будет искать. А так раз, фото открыл, ссылку из адресной строки воткнул и думать не нужно.
kakoi-to-noob
завязываться на абсолютные ссылки точно не вариант, домены могут меняться, ссылка на id картинки наиболее оптимальна
kakoi-to-noob
пользователь пошарился по своей галереи, выбрал файл и назначил для превью альбома
Михаил
Всем привет! Не очень понимаю, как реализовать следующую логику (или так делать вообще не стоит?). Есть сущность Album. У данной сущности есть свойство thumbnail, представляющее собой ManyToOne с сущностью Photo. Есть форма редактирования альбома. В ней есть поле "Обложка", где отображается ссылка на текущую обложку в виде URI (например https://localhost:3000/photo/Fotografiya-1). Чтобы изменить обложку, нужно, соответственно, просто открыть нужную фотографию, скопировать ссылку и вставить в это поле. Собственно, что мне непонятно. Как правильно обработать юзер-инпут в этом поле? Сперва в buildForm сделал getter и setter для этого поля. В сеттере проверял, что юзер-инпут - это ссылка, парсил её, и пытался найти соответствующее фото. Если репозиторий возвращал не null (фото существует), то всё ок - сущность Photo сохраняю в поле thumbnail. Если нет, то ничего не делаю. Но это как-то криво, нужна же валидация, чтобы пользователь понимал, в чём дело? Ок, сделал валидатор IsPhotoUri. Но затупил и не подумал о том, что значение-то валидируется после того, как маппится в сущность. Получается, нужно дважды валидировать сперва в сеттере, затем в валидаторе? Короче что-то не могу найти конец, за который потянуть, чтобы эту ситуацию распутать. Подскажите, пожалуйста.
Юзер открывает нужное фото и копирует ссылку и потом вставляет … Вот на этом моменте пользак засыпает и просто уходит. А ещё хорошее подспорье для хацкеров, вставить ссыль на свг с пейлоадом итд.
Виктор
Так я же не ссылку сохраняю. Что-то вроде такого: $path = parse_url($value, PHP_URL_PATH); $slug = $path[2]; $photo = $this->photoRepository->findOneBy(['slug' => $slug]);
Виктор
Как, в таком случае, лучше поступить? Мне данный способ показался наиболее простым. Нашёл фото, которое тебя устроит, и воткнул ссылку. Вставлять id (слаг в моём случае) фотографии? Так это ещё геморнее для пользователя - нужно его так же в адресе выделить, потом вставить.
Павел
Павел
Сделайте связь и всё
Виктор
У меня есть связь, я же писал)
Павел
У меня есть связь, я же писал)
Тогда не понятно в чем проблема
Виктор
class Album { #[ORM\ManyToOne] private ?Photo $thumbnail = null; }
Михаил
Ну в любом случае проще сделать так, что бы у каждого фото было 3 точки со скрытыми ивентами (удалить, открыть оригинал, сделать фотом альбома) Ну и всё, пользак нажал на «сделать фотом альбома» и внутри этого экшона присвоил айдишник
Виктор
Тогда не понятно в чем проблема
Проблема в том, как дать пользователю возможность менять обложки в форме редактирования альбома.
Павел
Проблема в том, как дать пользователю возможность менять обложки в форме редактирования альбома.
Можно не исользовать формы и делать что угоднои к ак угодно, если не справляетесь с формами. Так же можно не ссылку давать пользователю, а окно с выбором изображений и не придется ничего парсить
Павел
Ну либо упарываться в функционал форм, может свой компонент для форм написать