Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.7 ModelNotFoundException不为API调用返回json_Php_Laravel - Fatal编程技术网

Php Laravel 5.7 ModelNotFoundException不为API调用返回json

Php Laravel 5.7 ModelNotFoundException不为API调用返回json,php,laravel,Php,Laravel,我想在没有找到模型的情况下,对laravel 5.7应用程序api路由进行api调用时返回json响应。为此,我修改了app\Exceptions\Handler.php的render()方法,如下所示 public function render($request, Exception $exception) { if ($exception instanceof ModelNotFoundException && $request->wantsJ

我想在没有找到模型的情况下,对laravel 5.7应用程序api路由进行api调用时返回json响应。为此,我修改了
app\Exceptions\Handler.php的
render()
方法,如下所示

public function render($request, Exception $exception)
    {
        if ($exception instanceof ModelNotFoundException && $request->wantsJson()) {
            return response()->json(['message' => 'Not Found!'], 404);
        }

        return parent::render($request, $exception);
    }
public function show(Book $book)
    {
        return new BookResource($book->load('ratings'));
    }
我的控制器
show()
方法使用的是这样一种
Book
模型

public function render($request, Exception $exception)
    {
        if ($exception instanceof ModelNotFoundException && $request->wantsJson()) {
            return response()->json(['message' => 'Not Found!'], 404);
        }

        return parent::render($request, $exception);
    }
public function show(Book $book)
    {
        return new BookResource($book->load('ratings'));
    }
在postman上测试,对
localhost:8000/api/books/1
(id 1已被删除)的get调用将继续返回默认的laravel 404 not found页面,而不是json

我是不是漏了一步什么的?我还注意到在控制器
show()
方法中添加了一个条件语句,如下所示

public function show(Book $book)
    {
        if ($book) {
            return new BookResource($book->load('ratings'));
        } else {
            return response()->json(['message' => 'Not found'], 404);
        }
    }
返回相同的html结果,而不是json


处理这种情况的正确方法是什么?

您可以删除
$request->wantsJson

或者,您可以在请求中设置标题
“Accept”=>“application/json”

这可以帮助您:

    public function render($request, Exception $exception)
    {
        if ($exception instanceof ModelNotFoundException && ($request->wantsJson() || $request->ajax())) {
            return response()->json(['message' => 'Not Found!'], 404);
        }

        return parent::render($request, $exception);
    }

你的代码是正确的。问题是您可能正在本地环境中测试它,因此在.env中设置了:

APP_DEBUG=true
,将其切换到
APP_DEBUG=false
,您将看到自定义消息


PS:
$request->wantsJson()
如果您的客户端发送了正确的头信息,则不必执行此操作,例如:
'accept:application/json'

由于在注入模型之前发生了异常,因此不会触发条件语句。接下来的解决方案是什么?结果仍然相同您尝试了什么?请同时记录get_类($exception)。