流明请求验证不起作用
Lumen request validation not working
在我的 .env
文件中,我的生产服务器有以下设置:
APP_ENV=production
APP_DEBUG=false
在 laravel\lumen 文档中说,如果我们是 运行 生产服务器上的项目,我们应该将 APP_DEBUG
设置为 false
并将 APP_ENV
从例如 local
到 production
。当我这样做时,流明的请求验证停止工作。但是当我将 APP_DEBUG
设置为 true
时,请求验证按预期工作。我错过了什么吗?
P.S。生产服务器环境PHP版本为7.1.12
更新
此外,我在 App\Exceptions\Handler.php
渲染方法中有以下代码,我认为这也会影响行为:
if (env('APP_DEBUG')) {
return parent::render($request, $e);
}
$message = 'Внутренняя ошибка на сервере';
$response_code = 500;
if ($e instanceof MethodNotAllowedHttpException) {
$message = 'Запрос не разрешен (неправильный метод запроса)';
$response_code = 405;
}
elseif ($e instanceof NotFoundHttpException) {
$message = 'Указан неверный адрес конечной точки API';
$response_code = 404;
}
elseif ($e instanceof AuthorizationException) {
$message = 'Отказ в доступе (нет прав на доступ)';
$response_code = 403;
}
elseif ($e instanceof FatalThrowableError || $e instanceof \ErrorException)
{
$message = 'Неверный запрос URL-адреса (проверьте поля запроса)';
$response_code = 400;
}
elseif ($e instanceof QueryException) {
$message = 'Нарушение целостности базы данных';
$response_code = 406;
}
return response()->json([
'success' => false,
'errors' => [
[
'id' => 'default',
'message' => $message
]
]
], $response_code);
如果我设置 APP_ENV=production
和 APP_DEBUG=false
,Exception 的渲染方法 returns 它的 json 响应而不是验证响应。
我认为这里的问题是你没有在这里处理 Illuminate\Validation\ValidationException
。
根据您的需要,您可能想要更改:
if (env('APP_DEBUG')) {
return parent::render($request, $e);
}
进入
if (env('APP_DEBUG') || $e instanceof \Illuminate\Validation\ValidationException) {
return parent::render($request, $e);
}
或添加额外的 elseif
块,当 $e
是 instanceof \Illuminate\Validation\ValidationException
时,它将执行您想要的操作
在我的 .env
文件中,我的生产服务器有以下设置:
APP_ENV=production
APP_DEBUG=false
在 laravel\lumen 文档中说,如果我们是 运行 生产服务器上的项目,我们应该将 APP_DEBUG
设置为 false
并将 APP_ENV
从例如 local
到 production
。当我这样做时,流明的请求验证停止工作。但是当我将 APP_DEBUG
设置为 true
时,请求验证按预期工作。我错过了什么吗?
P.S。生产服务器环境PHP版本为7.1.12
更新
此外,我在 App\Exceptions\Handler.php
渲染方法中有以下代码,我认为这也会影响行为:
if (env('APP_DEBUG')) {
return parent::render($request, $e);
}
$message = 'Внутренняя ошибка на сервере';
$response_code = 500;
if ($e instanceof MethodNotAllowedHttpException) {
$message = 'Запрос не разрешен (неправильный метод запроса)';
$response_code = 405;
}
elseif ($e instanceof NotFoundHttpException) {
$message = 'Указан неверный адрес конечной точки API';
$response_code = 404;
}
elseif ($e instanceof AuthorizationException) {
$message = 'Отказ в доступе (нет прав на доступ)';
$response_code = 403;
}
elseif ($e instanceof FatalThrowableError || $e instanceof \ErrorException)
{
$message = 'Неверный запрос URL-адреса (проверьте поля запроса)';
$response_code = 400;
}
elseif ($e instanceof QueryException) {
$message = 'Нарушение целостности базы данных';
$response_code = 406;
}
return response()->json([
'success' => false,
'errors' => [
[
'id' => 'default',
'message' => $message
]
]
], $response_code);
如果我设置 APP_ENV=production
和 APP_DEBUG=false
,Exception 的渲染方法 returns 它的 json 响应而不是验证响应。
我认为这里的问题是你没有在这里处理 Illuminate\Validation\ValidationException
。
根据您的需要,您可能想要更改:
if (env('APP_DEBUG')) {
return parent::render($request, $e);
}
进入
if (env('APP_DEBUG') || $e instanceof \Illuminate\Validation\ValidationException) {
return parent::render($request, $e);
}
或添加额外的 elseif
块,当 $e
是 instanceof \Illuminate\Validation\ValidationException