Как заставить Laravel указать текст ModelNotForundException за меня?
У модели первичный ключ в виде определенным образом отформатированной строки. Хочу не делать запрос к БД, если строка отформатирована неправильно. Если просто делать throw new ModelNotFoundException(); то текст пустой. Можно, конечно, самому делать текст No query results for model [$classname] $value из входных параметров и имени класса, но может быть есть способ, чтобы фреймворк сделал это за меня (на случай, если они поменяют формат сообщения) и при этом не дергать базу?
У меня там в параметре uuid, запакованный в base64. Если на вход подана лажа (не получается uuid), то и запрос к базе делать не надо. Но если распаковывается - то в базе может не быть строки (findOrFail). Чтобы исключение было одно и то же и не менялось для потребителей api (ранее там был простой прямой implicit route binding, попросили укоротить ссылки, чтобы в смс лучше помещалось. решил сделать через resolveRouteBinding, чтобы он жрал и uuid и новый формат + не менять поведение для необновленных клиентов api). ошибка при этом должна быть единообразна для всех случаев.
Есть стандартный инструмент для решения этой задачи, но там другое исключение
это не совсем то
Но если прям горит, можно передавать модель в исключение
Чтобы исключение было одно и то же и не менялось для потребителей api
Если бы я был потребителем API, мне бы как раз хотелось легко отличать ситуации, когда я передал лажу от ситуаций, когда просто id не найден. В противном случае скрываются проблемы.
Но понимаю, что обратная совместимость важна. Однако, в таком случае нужно тогда реализовывать свои исключения, а не транслировать исключения фреймворка - ведь если они поменяют формат сообщения, у потребителей ваших всё равно сломается логика, которая ожидала конкретный текст.