如果验证失败/成功,Laravel 会更改响应标头

Posted

技术标签:

【中文标题】如果验证失败/成功,Laravel 会更改响应标头【英文标题】:Laravel changing response header if validation fails/succeeds 【发布时间】:2015-12-18 16:54:54 【问题描述】:

如果你的验证失败,Laravel 有这个很好的功能来返回 JSON。

http://laravel.com/docs/5.0/validation#controller-validation

不幸的是,响应标头设置为 client-side,如下所示。看起来 Laravel 会成功验证并以某种方式将响应标头更改为 html。但是,我在任何地方都没有看到这一点。有人有线索吗?

$.ajax(
    dataType: "JSON",
    error: function(error) //422 response, validation errors go here
    success: function(response)  //if validation successful

更新 我正在使用表单请求而不是基于控制器的验证,但这应该没什么区别。

【问题讨论】:

“设置客户端”是什么意思? Laravel 纯粹在服务器后端工作。您会期望哪些标头以及您会得到哪些响应标头? 表示如果成功则返回重定向响应。当然你可以在你的 AJAX 回调中捕捉到这个并做你想做的任何事情? 好吧,有道理,你能了解一下success(response)处理程序中的样子吗? 它实际上说如果它的AJAX,no重定向将被生成。 【参考方案1】:

使用 laravel,您可以更改通过 Laravel 发送给客户端的响应标头。

在您的控制器上的 5.1 中,您可以发送所需的响应标头,然后为它们提供不同的实现。

return response()->json(['message'=>'Error Encountered'],422);

这会向您的客户端发送 422 错误。第二个论点,您可以根据传递给客户端的内容设置不同的 http 代码。 看看函数在

处接受什么

http://laravel.com/api/5.1/Illuminate/Contracts/Routing/ResponseFactory.html#method_json

同样适用于 laravel 5.0

http://laravel.com/api/5.0/Illuminate/Contracts/Routing/ResponseFactory.html#method_json

对于验证后的重定向,您可以像这样附加标头

return Redirect::back()->header('Cache-Control', 'no-store');

http://laravel.com/api/5.0/Illuminate/Http/ResponseTrait.html#method_header

【讨论】:

谢谢@Mwaa。如何将其更改为 HTML? 在 html 中改变什么?回应? 是的,响应设置为 JSON 客户端,但我想在我的 laravel 应用中将其更改为 HTML 输出。 @timpeterson 您可以编辑问题以包含控制器操作如何验证。您使用的是表单请求还是常规验证? 我正在使用表单请求(自定义请求)。将编辑问题。谢谢

以上是关于如果验证失败/成功,Laravel 会更改响应标头的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 强制 json 响应 api

使用 Laravel 和 Passport 在身份验证失败时响应状态码 401?

Laravel API 调用失败。 PostMan 使用 Basic Auth 覆盖 Authorization 标头

Laravel 5 更改表单请求失败的验证行为

PayPal PHP SDK:由于身份验证凭据无效或缺少授权标头,身份验证失败

即使在设置 CORS 标头和服务器响应之后,Angular 和 laravel 的 CORS 问题[重复]