Konstantin
ну из скрина выше не очень понятно, что мы как-то ограничились "своим" исключением
Konstantin
а не ващевсеми
Павел
Есть репо, в идеале надо из него только ошибки общие выдавать, т.е. Какой нить query exception, а не doctrine exception , далее надо где то его превратить в json, что бы как раз не выльтели данные базы, и отдать "что то пошло не так", но это надо где то сделать, например контроллер. Что собственно и писал тс, на что вы ответили - это дурацкая логика. Я вот не понимаю, что в этом дурацкого
Konstantin
я мож не так его понял, я понял что он пытается выкидывать исключения с данными вместо возврата значений
Павел
я мож не так его понял, я понял что он пытается выкидывать исключения с данными вместо возврата значений
ну оки, тогда вопросов у меня нет:) это я согласен что 500 ошибки доктрины в первоначальном виде в клиентотдавать нельзя)
𝕎𝕒𝕣𝕞
А почему некоторые индивиды делают в catch Exception с пустыми {}
Юра
Если там не стоит тип эксшепшена то явно тупость
Konstantin
почти всегда, потому что они не очень умные
Konstantin
если какой-то супер-узкий сабсет задач, типа 0,01%, где программист явно это делает и точно знает почему и зачем. но таких задач единицы
Konstantin
правилом хорошего тона является хотя бы лог туда засунуть какой
𝕎𝕒𝕣𝕞
Понял, к чёрту репозиторий блога от индуса
Павел
А почему некоторые индивиды делают в catch Exception с пустыми {}
Когда падение опаснее пропуска ошибки, а логи не отслеживаются) Хотел делать так недавно в обработке сабскрайберов, чтобы падение одного сабскрайбера не крашила работу других. Но согласен, что стремное решение, надо хотя бы логи
Павел
А сделай так чтобы не падали
Отличное решение, нормально делай, нормально будет. Просто делать без багов, и вообще без возможных ошибок, даже доменных)
𝕎𝕒𝕣𝕞
По факту лучше их вначале поймать и пофиксить чем хранить
Юра
Тем более а симфе логи проще простого
Юра
LoggerInterface прописал и записал
Павел
Тем более а симфе логи проще простого
Это да, но это если их потом обрабатывать 😂
Konstantin
LoggerInterface прописал и записал
я там немножко, помню, возился с компайлер-пассом, чтобы в логгер попадало имя текущего класса
Konstantin
куда его инжектнули типа. довольно удобно на выходе, меньше руками писать
Павел
я там немножко, помню, возился с компайлер-пассом, чтобы в логгер попадало имя текущего класса
Хм, интересно, это как... Инжектнуть можно в разных местах, а сервис создаётся как синглтон, или делали ещё nonshared и это помогало?
Konstantin
не
Konstantin
сломалась гист-илка
Konstantin
поэтому файлом https://cdn.weblab.pro/6a6xt.php
Konstantin
мы просто инжектим (как обычно) в свои сервисы Psr\LoggerInterface
Konstantin
то есть сервисы ваще ничего не знают о том, что с ними что-то происходит
Konstantin
в монологе (если я не путаю подробности), у логгера есть поле $name - передается первым аргументом в конструктор, его мы заменяем на FQDN нашего сервиса, куда логгер инжектнули, типа App\Service\UserService
Konstantin
и потом просто настраиваем лог-формат так, чтобы этот name из логгера попадал в логлайн, в итоге будет чот типа [2022-07-24 21:01:07] [App\Service\Geo\UserService] searching user #524901
Konstantin
что в самом сервисе выглядит как $this->logger->info('searching user #524901');
Konstantin
или channel, а не name, правда уже плоховато помню механизм
Konstantin
лог формат выглядит как "[[%%extra.request_id%%]]: [%%datetime%%] [%%channel%%] %%message%%\n"
Юра
А через стак трейс нельзя?
Konstantin
А через стак трейс нельзя?
там надо будет в рантайме доставать текущее имя класса, плюс как-то модифицировать сервисы
Konstantin
тут мне решение нравится тем, что оно чисто компайл-тайм
Павел
Почти угадал, только вместо nonshared делается это самостоятельно, интересный ход, спасибо за пример
Konstantin
без трейтов, наследований, дополнительных методов/полей/интерфейсов
Павел
Но выходит что в большом проекте будет столько логгеров, сколько его вызовов и это много
Konstantin
а их и так довольно дофига
Konstantin
если резать его по слоям - всякие cache, app, request, doctrine
Konstantin
при этом сам логгер крайне легкая субстанция, он ваще ничего не хранит и ничего не делает
Konstantin
я думаю он байтов 100 в памяти жрет типа
Konstantin
я тут исходил из того, что необходимость править десятки-сотни сервисов точно лучше разменять на немного памяти
Konstantin
и вон, request_id положите в логи, очень помогает (спасибо, кэп!)
Юра
Кто-то знает почему в дуфолт установке симфы не включен кеш метаданных доктрины7
Юра
query_cache_driver: type: pool pool: doctrine.system_cache_pool result_cache_driver: type: pool pool: doctrine.result_cache_pool
Юра
но нет metadata_cache_driver
Konstantin
ой бля, они там норм намудрили с этими кешами нынче
Павел
но нет metadata_cache_driver
Хм, странно. Я вообще по этой теме не лазил, ради интереса залез в новенький проект - там стоит, ваша настройка. Ничего не меняли
Павел
А не, сорян) Перепутал вкладки, это старый проект ) в новом дейсвтительно нет
Vite4eg
Товарищи, а можно как-то в шторме в New -> Php Test добавить свой тип? Я добавил новый шаблон в File and Code Templates, но как его добавить в подраздел про тесты?
Vite4eg
У меня есть набор классов, для которых заготовка класса-теста отличется от стандартного
Nikolay
У меня есть набор классов, для которых заготовка класса-теста отличется от стандартного
Не совсем понимаю про что, что за заготовка и стандартный это какой
Vite4eg
Ну например вот. Я могу прямо в классе сформировать класс для теста. Но есть некоторые классы, для которых в классе-тесте надо ещё навносить всякого. Я не могу понять как свои кастомные шаблоны в этот список добавить
Vite4eg
Они отдельно хранятся, в своей папке
Nikolay
Они отдельно хранятся, в своей папке
А как эти шаблоны должны использоваться?
Vite4eg
Ну это кодогенерация. Шторм создаст файл с нужным именем, пропишет всякие extends, use и прочее
Nikolay
Ну это кодогенерация. Шторм создаст файл с нужным именем, пропишет всякие extends, use и прочее
Кодогенерация в тестах? Может кто подскажет, но я пока не встречал такое в практике
Vite4eg
А как ты создаёшь тесты? Ты их куда прописываешь?
Nikolay
А как ты создаёшь тесты? Ты их куда прописываешь?
Отдельный класс в отдельную директорию тестов
Vite4eg
Ну да ) Шторм так и сделает: отдельный файл в отдельную директорию тестов
Vite4eg
Нет проблем если у тебя просто класс. А если у тебя там зависимости, setUp и прочие штуки - задалбывает писать
Nikolay
Нет проблем если у тебя просто класс. А если у тебя там зависимости, setUp и прочие штуки - задалбывает писать
Не всегда это нужно, но вручную всегда лучше, чем кто то за тебя неизвестно что сделает
Vite4eg
Ну как раз прелесть своих шаблонов в том, что ты сам прописываешь, что тебе должно сгенерироваться
Vite4eg
Ну у меня это частый случай. Поэтому и хочу упростить
Vite4eg
Приватное свойство либо свойства для хранения зависимостей, и метод setUp
Александр
Привет. Кто может подсказать? Жила была сущность, имела она несколько связей ManyToOne. И жила она припиваюче, не болея. И вот решил добавить новое свойство, string (nullable=true). И вроде все бы ничего, но стали теперь сыпаться ошибки Multiple non-persisted new entities were found through the given association graph откатываю до изменений добавления свойства, снова работает как часы. как добавление одного свойства (до этого их уже десяток было добавлено таким способом) могло спровоцировать эту ошибку? все объекты для связей передаются корректно find($id) все они существуют. именно добавление нового поле мозги мне делает
Юра
И что там ничего кроме поля этого не менялось?
Юра
Никакой другой код больше?
Александр
в том и дело нет. добавлено поле, ну и добавлена его заполняемость,как и куча предыдущем свойств.
Александр
если запускается одиночная операция, то все ок. если в цикле взять 5-10 штук, то первая без нареканий создается, остальные вылетают с ошибками