Laravel:忽略412错误页面

时间:2016-09-05 12:05:09

标签: php json laravel lumen

对此必须是一个非常简单的解决方案,但我不知道如何在Google或Stackoverflow中搜索这个问题,所以,是的,到目前为止我找不到任何东西。

我在Lumen中编写了一个简单的API路由,在验证失败时返回包含421的json字符串:

 {   "code": 412,   "status": "error",   "data": "validation failed" }

现在我想在另一个Laravel项目中调用该路由,但是后来代替API中的JSON字符串,我得到一个巨大的错误页面说:

  

客户端错误:POST http://www.serellyn.net/development/game_api/public/platforms

产生了412 Precondition Failed 回复:

{"code":412,"status":"error","data":"validation failed"}

我认为这是非常正常的行为,因为Laravel看到它的响应有误。但我想要做的就是收到我自己的带有412错误代码的json字符串,并且能够继续使用我的网页。

我该如何解决这个问题? 提前谢谢。

编辑:忘记添加一些代码。我使用Guzzle来调用我的API。

$client = new Client(['base_uri' => 'http://www.serellyn.net/development/game_api/public/', 'auth' => array('dev', '<dev>2016')]);
        $res = $client->request('POST', 'platforms', array('form_params' => ['name' => $request->name]));
        if($res->getStatusCode() == 201) {
            Session::flash('success', $request->name . ' successfully added');
        } else {

        }
        return redirect()->route('platforms.add.get');

3 个答案:

答案 0 :(得分:1)

我认为回答是正确的。我要做的是捕获try-catch块中的错误,然后继续我想要的方式。

答案 1 :(得分:1)

问题是如果http_errors请求选项设置为true,Guzzle会抛出400级错误的异常。 (这是默认值)

您需要将'http_errors' => false放入请求中,例如:

$client->request('POST', 'platforms', array('http_errors' => false,'form_params' => ['name' => $request->name])); if($res->getStatusCode() == 201) {

http_errors docs

答案 2 :(得分:0)

遇到了同样的问题,但是有一个网站,我只是在apache服务器上重写了我的mod_security模块,它再次与ssl一起工作良好。您可以阅读更多here