Павел
Konstantin
ну из скрина выше не очень понятно, что мы как-то ограничились "своим" исключением
Konstantin
а не ващевсеми
Павел
Есть репо, в идеале надо из него только ошибки общие выдавать, т.е. Какой нить query exception, а не doctrine exception , далее надо где то его превратить в json, что бы как раз не выльтели данные базы, и отдать "что то пошло не так", но это надо где то сделать, например контроллер. Что собственно и писал тс, на что вы ответили - это дурацкая логика. Я вот не понимаю, что в этом дурацкого
Konstantin
я мож не так его понял, я понял что он пытается выкидывать исключения с данными вместо возврата значений
𝕎𝕒𝕣𝕞
А почему некоторые индивиды делают в catch Exception с пустыми {}
Юра
Если там не стоит тип эксшепшена то явно тупость
Konstantin
почти всегда, потому что они не очень умные
Konstantin
если какой-то супер-узкий сабсет задач, типа 0,01%, где программист явно это делает и точно знает почему и зачем. но таких задач единицы
Konstantin
правилом хорошего тона является хотя бы лог туда засунуть какой
𝕎𝕒𝕣𝕞
Понял, к чёрту репозиторий блога от индуса
𝕎𝕒𝕣𝕞
Павел
А сделай так чтобы не падали
Отличное решение, нормально делай, нормально будет. Просто делать без багов, и вообще без возможных ошибок, даже доменных)
𝕎𝕒𝕣𝕞
𝕎𝕒𝕣𝕞
По факту лучше их вначале поймать и пофиксить чем хранить
Юра
Тем более а симфе логи проще простого
Юра
LoggerInterface прописал и записал
Konstantin
куда его инжектнули типа. довольно удобно на выходе, меньше руками писать
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
тут мне решение нравится тем, что оно чисто компайл-тайм
Павел
Почти угадал, только вместо 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
ой бля, они там норм намудрили с этими кешами нынче
Null
Павел
но нет metadata_cache_driver
Хм, странно. Я вообще по этой теме не лазил, ради интереса залез в новенький проект - там стоит, ваша настройка. Ничего не меняли
Павел
А не, сорян) Перепутал вкладки, это старый проект ) в новом дейсвтительно нет
Vite4eg
Товарищи, а можно как-то в шторме в New -> Php Test добавить свой тип? Я добавил новый шаблон в File and Code Templates, но как его добавить в подраздел про тесты?
Nikolay
Vite4eg
У меня есть набор классов, для которых заготовка класса-теста отличется от стандартного
Nikolay
Vite4eg
Ну например вот. Я могу прямо в классе сформировать класс для теста.
Но есть некоторые классы, для которых в классе-тесте надо ещё навносить всякого. Я не могу понять как свои кастомные шаблоны в этот список добавить
Nikolay
Vite4eg
Они отдельно хранятся, в своей папке
Vite4eg
Ну это кодогенерация. Шторм создаст файл с нужным именем, пропишет всякие extends, use и прочее
Nikolay
Vite4eg
А как ты создаёшь тесты? Ты их куда прописываешь?
Nikolay
Vite4eg
Ну да ) Шторм так и сделает: отдельный файл в отдельную директорию тестов
Nikolay
Vite4eg
Нет проблем если у тебя просто класс. А если у тебя там зависимости, setUp и прочие штуки - задалбывает писать
Nikolay
Vite4eg
Ну как раз прелесть своих шаблонов в том, что ты сам прописываешь, что тебе должно сгенерироваться
Nikolay
Vite4eg
Ну у меня это частый случай. Поэтому и хочу упростить
Nikolay
Vite4eg
Приватное свойство либо свойства для хранения зависимостей, и метод setUp
Александр
Привет. Кто может подсказать?
Жила была сущность, имела она несколько связей ManyToOne. И жила она припиваюче, не болея.
И вот решил добавить новое свойство, string (nullable=true). И вроде все бы ничего, но стали теперь сыпаться ошибки
Multiple non-persisted new entities were found through the given association graph
откатываю до изменений добавления свойства, снова работает как часы.
как добавление одного свойства (до этого их уже десяток было добавлено таким способом) могло спровоцировать эту ошибку?
все объекты для связей передаются корректно find($id) все они существуют. именно добавление нового поле мозги мне делает
Юра
И что там ничего кроме поля этого не менялось?
Юра
Никакой другой код больше?
Александр
в том и дело нет. добавлено поле, ну и добавлена его заполняемость,как и куча предыдущем свойств.
Александр
если запускается одиночная операция, то все ок. если в цикле взять 5-10 штук, то первая без нареканий создается, остальные вылетают с ошибками
Null
Александр