从L5.1更新到L5.2后,我不再收到一个JSON对象作为失败的FormRequest的响应(即在AJAX帖子请求上)。
通常我会收到422回复,如:
[
email: 'E-mail is invalid',
firstname: 'Firstname must be at least 2 characters'
]
但现在我收到500错误页面:
我确保我的AJAX调用application/json
为Accept
标题。
不,我没有手动捕获此异常。我正在使用Laravel提供的默认FormRequest。正如他们在文档中所述:在AJAX请求期间使用validate方法时,Laravel不会生成重定向响应。相反,Laravel会生成包含所有验证错误的JSON响应。此JSON响应将使用422 HTTP状态代码发送。
同样如此:php artisan make:request StoreBlogPostRequest
(https://laravel.com/docs/5.1/validation#form-request-validation)
答案 0 :(得分:5)
@Mattias!
我最近遇到了同样的问题,我浪费了2个多小时试图了解究竟是什么导致了这个问题。在.env文件中禁用调试会导致表单验证显示500,因为FormValidator抛出ValidationException(并且未处理)。这个问题的解决方案是: 打开 app \ Exceptions \ Handler.php
private function handleExceptions($e)
{
// Add anywhere in this method the following code
// It does what the FormValidator does.
if($e instanceof ValidationException) {
return redirect()->back()->withErrors($e->validator->getMessageBag()->toArray());
}
return response()->view('errors.500', [], 500);
}
答案 1 :(得分:4)
要重申其他人所说的内容,您很可能在项目中修改了app/Exceptions/Handler.php
,其中有一些代码阻止您看到您希望的结果。
所有异常都由App \ Exceptions \ Handler类处理。该类包含两个方法:report和render。
仔细检查app/Exceptions/Handler.php
以及https://laravel.com/docs/5.2/errors#the-exception-handler处有关异常处理程序的文档,以确保按照您的意图处理异常。
答案 2 :(得分:0)
我使用 Laravel 5.7 遇到了同样的问题。
如果您阅读 /storage/logs/laravel-yyyy-mm-dd.log 文件,则会发现错误。就我而言,发生此错误是因为我在 Controller 中链接 StoreLocation 请求时忘记了一个步骤:
日志中的错误:
[2018-12-13 09:48:09] local.ERROR: Class App\Requests\StoreLocation does not exist
非常清楚,我开始写代码之前没有先喝咖啡!
解决方案:
use App\Http\Requests\StoreLocation;
我添加了正确的路径StoreLocation.php类。解决此问题后,一切恢复正常并开始发送422响应。
PS1:要获取日志,请确保打开调试模式:将 APP_DEBUG = true 添加到.env文件
PS2:日志文件将最新条目存储在底部