withRouting( web: __DIR__.'/../routes/web.php', // Пути в задании заданы без префикса. Маршруты при этом остаются // в routes/api.php со stateless-мидлварами группы api. api: __DIR__.'/../routes/api.php', apiPrefix: '', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware): void { // }) ->withExceptions(function (Exceptions $exceptions): void { // Доменные отказы несут свой статус и код причины. $exceptions->render(fn (SlotBookingException $e) => response()->json([ 'message' => $e->getMessage(), 'reason' => $e->reason, ], $e->status)); // 404 без имени класса модели в ответе. ModelNotFoundException ловить // бесполезно: Laravel подменяет её на NotFoundHttpException до колбэков. $exceptions->render(fn (NotFoundHttpException $e) => response()->json([ 'message' => 'Resource not found.', 'reason' => 'not_found', ], 404)); // Только API: JSON даже клиенту без Accept: application/json. $exceptions->shouldRenderJsonWhen(fn (Request $request, Throwable $e) => true); })->create();