Laravel - 防止错误显示在控制台中
Posted
技术标签:
【中文标题】Laravel - 防止错误显示在控制台中【英文标题】:Laravel - Prevent errors from being shown in console 【发布时间】:2016-03-12 09:21:41 【问题描述】:我正在执行 ajax 请求,如果验证失败,则会向用户显示错误消息。
但是,用户也可以在控制台中看到错误消息。例如,如果用户没有完成其中一个字段,则在控制台中,它会显示以下内容:
加载资源失败:服务器响应状态为 422 (Unprocessable Entity)
我不希望他们看到错误。如何防止他们在控制台中看到此类错误以及其他错误,例如 501 错误等。我只是想显示一个警告说“发生错误”。我不想在控制台中显示任何内容。
我当前的 AJAX 代码:
(function ($)
$('#settingsForm').submit(function (e)
$.ajax(
type: "POST",
dataType: 'JSON',
url: '/settings',
data: $('#settingsForm').serialize(),
beforeSend: function ()
,
success: function (data)
message(data);
,
error: function (data)
if (data.status === 422 )
var errors = $.parseJSON(data.responseText);
errorshtml = '<div class="alert alert-danger"><ul>';
$.each(errors, function (index, value)
errorsHtml += '<li>' + value + '</li>';
);
errorsHtml += '</ul></div>'
$('#status_settings').html(errorsHtml);
)
;
e.preventDefault();
)
;
)
(window.jQuery);
【问题讨论】:
您是否有任何特殊原因要隐藏这些错误消息?我认为,如果可能的话,它需要一些特殊的权限来请求,或者通过浏览器扩展。 可能在 dataType: 'JSON' 上。你得到现场的输入了吗?测试Input::get('YOUR_INPUT_FIELD')
我没有显示,而是观察错误并显示错误警报。我得到了现场输入,是的
对不起,我错过了理解你的问题,所以你想在浏览器控制台中抑制错误代码。是的,您可以通过 javascript 访问 chrome 控制台对象,但是您是否可以抑制错误,这需要一些在这方面有经验的人。
你不能。这些是 HTTP 错误。任何人都可以通过控制台查看它们。
【参考方案1】:
看起来您正在使用 Laravel 表单请求验证,它会发送 422 状态代码以表示验证失败以及错误,以防 AJAX 表单提交。您现在可以做两件事来更改状态代码并从控制台中删除错误消息(仅在这种情况下):
覆盖 vendor/laravel/framework/src/Illuminate/Foundation/Http/FormRequest.php 中的响应函数,并在新函数中将状态码更改为 200。从那里复制函数并将其粘贴到 app/Http/Requests/Request.php 的 Request 类中。 更改以下行
return new JsonResponse($errors, 422);
到这样的事情:
$errors['status'] = 'error';
return new JsonResponse($errors, 200);
不使用表单请求验证,而是创建一个 Validator 实例以在您的控制器函数中进行验证,并在验证失败时返回 JSON response 并返回 200 状态码。
【讨论】:
正是我想要的。做 #2 完成了这项工作。谢谢。 欢迎您!我已经更新了我的答案,以展示如何使用表单请求验证来执行此操作的示例。【参考方案2】:从您的代码看来,您正在使用错误代码 422 作为验证错误。这些错误显示在控制台中。您所要做的只是返回 200 表示成功和验证错误。由于验证错误意味着请求成功,因此只有数据是错误的,因此您应该始终为此使用 200 代码。
您可以做的是创建另一个变量,可能是如下所示的响应并检查成功消息中的状态(如果成功或发生验证错误)。其他错误代码仍然可以在错误闭包中处理。
success: function (data)
if(data.response == 'success')
message(data);
else if(data.response == 'validation-error')
var errors = $.parseJSON(data.responseText);
errorsHtml = '<div class="alert alert-danger"><ul>';
$.each(errors, function (index, value)
errorsHtml += '<li>' + value + '</li>';
);
errorsHtml += '</ul></div>'
$('#status_settings').html(errorsHtml);
,
【讨论】:
以上是关于Laravel - 防止错误显示在控制台中的主要内容,如果未能解决你的问题,请参考以下文章