Юра
Мне например не очень нравится то что коды ошибок приложения перетекают в http статус коды. Как по мне это чистейшее нарушение слоев, но так принято и все так делают
Юра
Из-за этого возникают странные конфузы по типу, твой бек возвращает 400 код при ошибке валидации, а свагер джс клиент кидает исключение, причем в исключении нет тела ответа. приходися писать пережватчик ответа и устанавливать руками что такой ответ это ок и исключение не требуется
Юра
На лицо костыль
Павел
Юра
Ну меня так завернули на одном собеседовании
Юра
По типу парень ты шо Джун
Юра
Вообщем как минимум при разработке ошибок их можно поделить на recoverable и final, или те которые требуют какого-то действия и те которые все фатал, ничего не сделать, и предоставить клиенту возможность их отличать
Юра
Возможно еще ретрай
Юра
Т.е. запрос стоит повторить
Юра
Бывает при дедлоках всяких и прочих временных ошибках типо сервер перегружен
Юра
Если у тебя не будет четких таких разделений для клиентов, никто не будет обрабатывать все возможные нттп коды и смотреть что делать
Юра
Ну вот кстати сразу пример таких протекающих абстракций. Вернул сервер статус код retry later. Во-первых непонятно кто его вернул - прокси сервер, нгинкс, твое приложение? И непонятно кто на него должен реагировать? Джс либа которая сделала запрос? Приложение?
Юра
Все это уде не стандартизировано и на твое усмотрение
Павел
Ну меня так завернули на одном собеседовании
Значит туда не надо) хорошо что завернули) ошибок логики может быть много, возможно приложению надо их по разному обработать, http кодов в теорииможет просто не хватить. Не ну в простом варианте можно 1 к 1, но говорить "это принято и только так" - перебор. Как любят писать it depend
Alexey Mishurovskiy
event.DEBUG: Listener "Symfony\Component\HttpKernel\EventListener\ErrorListener::logKernelException" was not called for event "kernel.exception". {"event":"kernel.exception","listener":"Symfony\\Component\\HttpKernel\\EventListener\\ErrorListener::logKernelException"} []
А что это значит ?
Alexey Mishurovskiy
точнее какого хрена :)
Юра
Возможно stop propagation и оно типо не вызвало листенен и просто сказало об этом?
BSDRazor 🇺🇦
Добрые люди подскажите где читать может пример есть, короче в контроллере мне нужно получить инфу из Редис если его там нет - то записать его туда, какую либу надо пользовать ? Внятной доки не нахожу
BSDRazor 🇺🇦
Хотелось бы где то в конфиге указать как к редису подключится а контроллере что то типа $redis->get('key') и $redis->set(key, value)
Юра
Используй стандартный симфонийский кеш
Юра
С редис адаптером
Юра
Там модно инджектить потом по названию твоего кеш пула
Юра
Т.е. надо создать свой кеш пул и указать ему использовать редис адаптер
Andrii
я бы ещё теги добавил при работе с кешом, очень удобно чистить потом:)
Юра
Ну если у него отдельный кеш пул будет, он тоже чистится целиком
Евгений
Друзья, всем здравствуйте! Подскажите пожалуйста, как составить в dql запрос такого рода. Нужно получить все обькты "Место" (для аренды) и некоторые (по условию) обькты связанной сущности "Заказ" (многие комногим). Пробовал через select... join... with, но тогда фильтруются и места. Спасибо.
Павел
Павел
Точнее условие в самом left join
Евгений
Left loin с with почему то with игнорируется
Павел
Jeftjoin ('a.rel', 'rel', with, 'a.relid = rel.id and rel.prop=1)
Павел
Как то так схематически
Павел
И ещё наверное жадную загрузку надо, иначе при ленивой будут запросы без условий
Евгений
createQuery('SELECT p FROM App\Entity\Place p LEFT JOIN p.rents r WITH r.beginDate < :beginDate')
Евгений
меняю знак меньше на больше, и ничего не изменяется
Павел
Вроде как корректно, посмотрите лог запроса. Возможно ещё ленивая загрузка отрабатывает
Павел
Т.е. Запрос корректный, но потом когда вы обращаетесь к свойству происходит новый запрос чтобы получить связи уже без условия
Евгений
Очень извиняюсь, где посмотреть лог запроса?
Сергей
А почему тут места не должны фильтроваться?) у кого нет rents, те отфильтруются
Юра
Евгений
мне нужно вывести все места с пустыми и занятыми днями
Юра
<?php
$query = $em->createQuery('SELECT u FROM CmsUser u WHERE u.phonenumbers IS EMPTY');
$users = $query->getResult();
Юра
Или не то?
Евгений
спасибо, пока сделаю выборку всех мест со всеми заказами, а в сервисе буду фильтровать
Евгений
не совсем то
Юра
WHERE place.orders IS EMPTY
Сергей
Евгений
Я понимаю, но я хочу сказать, что первое условие не выполняется.
Евгений
Когда я пойму как правильно писать условие, я смогу добавить остальные. Спасибо
Павел
Евгений вы уверены что ленивая загрузка не отрабатывает?
Евгений
Не уверен. Я просто не знаю, где профайлер.
Павел
Не уверен. Я просто не знаю, где профайлер.
https://symfony.com/doc/current/profiler.html
Будет доступен по /_profiler
Еще можете попробовать переписать свой запрос на кверибилдер и использовать addSelect для жадной загрузки связи.
Павел
Лично я просто не знаю как работает жадная/ленивая загрузка на dql без квери билдера.
Евгений
Спасибо
𝕎𝕒𝕣𝕞
Имеется таблица друзья, в ней поля Профиль, Профиль2, Направление
Профиль и профиль2 это @id от association key профиля
При попытке создать запись говорит что так нельзя
Почитал на gihub о этой ошибке, написано что доктрина не поддерживает 2 ключа
это как так?😭
Юра
Ты что бот?
Юра
Или переводишь с китайского?
𝕎𝕒𝕣𝕞
Nikolay
𝕎𝕒𝕣𝕞
Юра
Ну а у тебя есть колонка id?
Юра
У тебя составной примари ки получается?
𝕎𝕒𝕣𝕞
Я разобрался, у меня проблема в другом была
Null
Павел
Приветствую. Подскажите плиз с решением проблемы:
Есть декоратор на EntityManager. Он lazy для того, чтобы можно было делать resetManager для переоткрытия. Но проблема в том, что рестится именно декоратор через прокси, а default EntityManager остается закрытым после ошибок при сохранении. Короче reset не работает
Нашел решение - при сборке декоратора в конструкторе, пересоздавать вручную default EntityManager. Вроде работает но какой то кастыль дикий, так как создаю вручную а не забираю из контейнера (мало ли, кто что еще вешает в качестве декораторов).
Пробовал сделать non shared default EntityManager, что бы контенер сам его пересоздавал - но не выходит. В yml - не применяет конфигурацию, а через компайлер пасс не видит .inner сервис. Хотя дебаг контейнера тот сервис видит.
Может кто сталкивался и решал.
Есть вот ишью коммент в ищью на эту тему: https://github.com/doctrine/orm/issues/5933#issuecomment-559814283
Юра
Возможно стоит перезапустить приложение если эм закрылся?
Павел
Юра
Вместо переоткрытия просто завершить приложение
Юра
У меня воркер например перед обработкой сообщения проверяет открыт ли эм
Юра
Если закрыт он просто завершается
Юра
Почему оно пропадает
Юра
Зависит от настроек
Юра
Ретрай будет
Павел
Или можно иначе?
Юра
Ну да по-моему