artem
Обмороженными пальцами хочется закончить проект быстрее
Unreal
1. Камбоджа Наем шикарного дома в четырьмя спальнями и бассейном обойдется всего в 540 евро в месяц!
artem
Маврикий там малярия
Нас же комарик укусит и крипта упадет на дно)
Денис
Товарищи, может кто-то подсказать, вот эти исключения доктриновские ORMException OptimisticLockException на каком этапе обычно обрабатываются? В репозитории прямо? В сервис уже должно попадать что-то типа LogicException ? Или я чего-то не понимаю
artem
Посмотри в класс. Дб наследование от logic. В чем вопрос? Где ловить?
Юра
Все зависит от твоей логики
Юра
Где нужно там и лови
Денис
Посмотри в класс. Дб наследование от logic. В чем вопрос? Где ловить?
Ну вот у меня в репозитории метод, допустим, save. В нем могут быть исключения доктрины, типа ORMException или OptimisticLockException . Их стоит прямо там, в репозитории ловить? Потом писать в логи и наверх, в сервис, отдавать уже каокй-то нейтральный экзепшн, типа LogicException, чтобы просто приложение крашнуть?
Денис
Все зависит от твоей логики
я хочу знать как это правильно делать, как обычно делается.
artem
Прокидывать в репе и ловить в сервисе. Я ещё дальше бросал))
Денис
Прокидывать в репе и ловить в сервисе. Я ещё дальше бросал))
Только что подумал, по идее сервис же не должен зависеть от репозитория. Соответственно и от его исключений тоже. Если мы подкинем другой репо, у него уже может не быть ORM исключений, будут свои. В таком случае не логично было бы сделать общее исключение для ошибок в репозитории и прокидывать наверх уже его?
Dmitry
Ну вот у меня в репозитории метод, допустим, save. В нем могут быть исключения доктрины, типа ORMException или OptimisticLockException . Их стоит прямо там, в репозитории ловить? Потом писать в логи и наверх, в сервис, отдавать уже каокй-то нейтральный экзепшн, типа LogicException, чтобы просто приложение крашнуть?
Общее PDOException можно вообще не ловить и тогда оно само в логи попадёт с 500 Server Error. А OptimisticLockException можно поймать в репозитории и преобразовать в красивое исключение с текстом "Пардон, но кто-то уже сохранил до вас".
Юра
Я ловлю те исключения которые могу как-то внятно отработать. Остальные не ловлю. На фронте вылазит окно сори что-то пошло не так и кол ошибки, так же падает в лог
Юра
Все зависит от твоей логики обработки. Она у всех разная
Юра
Тут важнее чтобы в коде как в джаве было, либо ты ловишь сам исключения, либо помечаешь фцию как throw
Юра
Тем самым говоришь коду выше чтобы он обрабатывал или тоже помечал
Юра
Шторм норм подсвечивает если ты не обработал исключение и не пометил фцию
Денис
Вот как раз то что я хотел выяснить. Всем большое спасибо за советы!
Юра
А в симфе ты можешь написать свой кастомный обработчик исключений
Юра
https://symfony.com/doc/current/controller/error_pages.html
Alexander
я хочу знать как это правильно делать, как обычно делается.
Обычно их не перехватывают. Симфони сама их залогирует и выдаст 500 ошибку. Вполне рабочее решение, если логи кто-то смотрит. Я подключаю sentry чтобы не пропускать ошибки, некоторые ребята шлют логи в слак/телегу. Правильно - из доменного сервиса должны прилетать доменные исключения. Это если важно, чтобы разделение на слои/контексты работало. Можно посмотреть в сторону https://github.com/qossmic/deptrac и погуглить как и для чего его используют. Правильный подход имеет смысл если у вас на проекте как минимум больше двух разработчиков которые занимаются проектом много лет и всё осложняется сложной бизнес логикой. Для формошлёпства это, мне кажется, лишнее.
Alexander
Если логи пишутся только в prod.log который никто никогда не смотрит, то не имеет значения какие исключения от куда и куда кидаются - о них всё равно никто никогда не узнает.
Alexey Mishurovskiy
Коллеги, возник вопрос - как при JWT сохранить данные в сессию ?
Alexey Mishurovskiy
Задача - приложение обслуживает SPA по API нужно запросить код подтверждения через смс, соответственно сохранить его в сессию для проверки
Юра
Созрани в бд
Юра
У меня для жтого есть энтити UserOption и такой вот код в UserRepository
Юра
Юра
Alexey Mishurovskiy
Созрани в бд
Типа мини редис с блекджеком ?
Юра
Да типо чтобы не ставить редис для одной операции )
Юра
Ну и удобно юзера удалил все опции удалились
Alexey Mishurovskiy
Ну да, вариант, спасибо ) А кроме как при вызове геттера как то инвалидируешь их ?
Alexey Mishurovskiy
по крону там напримем
Юра
Не у меня не так много опций и юзеров чтобы запариваться по этому поводу
Юра
Но можно написать крон с одним запросом
Alexey Mishurovskiy
Понял тебя )
Юра
А я вот сиду и думаю есть типо мини црм, как вебапликуха, туда бы пуши прикрутить, но грёбаный эпл все портит
Alexey Mishurovskiy
Подумал, если не надо, например по опциям искать, почему бы их не положить в json в поле бд
Юра
Можно наверное и джсон
Alexey Mishurovskiy
и в lifesycle их трансформить в DTOшку
Юра
Я привык делать минимальное количество телодвижений )
Юра
Можно вообще развернуть микросервис для этого дела
Юра
)
Юра
Как быть если нужны пуши для веб приложения на айос?
Юра
Просто пипец, чувствуешь себя немощем каким-то против мегакорпорации
Юра
Нах мне их свифт и эпл стор, макбуки.и т.д. если мне просто надо увеломлять юзера из готового продукта
Юра
Конченая контора. Не берите айфоны короче )
Alexey Mishurovskiy
😂
Сергей
Всем привет. В сонате не могу победить простейшую фигню. Короче надо в админке вывести список юзеров, отсортированный по определенному коэффиценту. Коэффиценты лежат в отдельной сущности, привязанной к юзерам. В сонате можно модифицировать квери, собираемый по-умолчанию. Это делается в методе configureQuery, там собирается некая ProxyQuery. Ну и делаю стандартно $query->addSelect('coalesce(uec.value,0) as uecValue'); $query->leftJoin(sprintf('%s.uecs', $alias), 'uec', Join::WITH, sprintf('uec.user = %s and uec.project is null', $alias)); $query->addGroupBy(sprintf('%s.id', $alias)); $query->addGroupBy('uec.value'); $query->orderBy('uec.value', 'DESC'); Проблема в том, что если в табличке uec данных по юзеру нет, то сортировка нуллы ставит на первое место. Это нормально, но не то, что мне нужно). Пытаюсь победить это при помощи coalesce: $query->orderBy('coalesce(uec.value, 0)', 'DESC'); Но тут получаю ошибку Expected known function, got 'coalesce' Если добавить coalesce в селект, ошибки нет $query->addSelect('coalesce(uec.value,0) as uecValue'); Но по нему тогда никак не отсортировать. Может есть у кого-то идеи, а то я не этой фигне уже всю голову сломал
Igor
order by x nulls last не пробовал?
Сергей
order by x nulls last не пробовал?
а разве в квери nulls last можно добавить?
Igor
хз, я б попробовал
Сергей
Igor
пичалька а у тебя какая субд?
Igor
там по моему есть возможность в селекте добавтиь поле с "AS HIDDEN", тогда оно не попадет в вывод, но по нему можно сделать сортировку. мб так получится
Сергей
$query->addSelect('CASE WHEN uec.value IS NULL THEN 1 ELSE 0 END AS HIDDEN myValueIsNull'); $query->orderBy('myValueIsNull', 'ASC'); с обычным кверибилдером вроде такое работает, а проксиквери вот ошибку выдает Error: 'myValueIsNull' is not defined.
Сергей
точнее наверное дело не в проксиквери, а в самой сонате Вот этот DQL падает с ошибкой SELECT DISTINCT o.id FROM App\User\Entity\User o LEFT JOIN o.uecs uec WITH uec.user = o and uec.project is null GROUP BY o.id, uec.value ORDER BY myValueIsNull DESC, o.id ASC а такой DQL видать каким-нибудь гридом в сонате создается
Igor
к сожалению не работал с сонатой, не могу подсказать
Юра
Ну у тебя в селекте нет myValueIsNull
Юра
А что там в сонате нельзя полностью заменить квери?
Сергей
Ну у тебя в селекте нет myValueIsNull
Это не у меня в селекте, а в селекте, который соната сгенерировала)
Сергей
А что там в сонате нельзя полностью заменить квери?
Там можно proxyquery заменить, который далее используется в разных местах
Юра
Ну я написал что неудивительно что запрос падает
Юра
Он некорректный
Юра
А почему он такой это видимо надо смотреть в сонату
Юра
Можешь попробовать написать свою функцию для доктрины
Юра
Которая добавит nulls last
Юра
Там вроде не сильно сложно
Юра
Обычным sql это можно еще сделать через union
Юра
Сначада выбрать без нул, потом с нул
Andrey
Всем привет! Передаю в мобильное приложение картинки которые сохранены на сервере в /public/images/attachments/ ссылки приходят корректные, но вот не отображаются картинки, когда попробовал подставить ссылку на картинку в поиск в браузер то ошибка в следующем: No route found for "GET /public/images/attachments/fWebuSD044M.jpg" видимо поэтому и не отображаются картинки. и вот вопрос у меня что делать в этом случае, каким-то образом под каждую картинку роут прописывать?)) Или так вообще делать нельзя и картинки надо хранить в каком-то хранилище типо s3?