PHP怎么实现Dingo API for Laravel_Laravel API开发包【操作】

陌涛大大_6019

陌涛大大_6019

2026-04-12

639人浏览

原创

应改用社区维护分支 kitloong/laravel-dingo-api,它兼容 laravel 9–11,解决 illuminate/support 版本冲突;需通过 middleware('api') 显式启用 dingo 功能,并使用 laravel 原生响应机制替代已移除的 $this->response 调用。

php怎么实现dingo api for laravel_laravel api开发包【操作】

安装 Dingo API 时 composer 报 illuminate/support 版本冲突怎么办

新版 Laravel(如 10.x/11.x)默认使用 illuminate/support ^10.0 或 ^11.0,而 Dingo API 官方包(dingo/api)已多年未更新,最高只兼容到 Laravel 5.8,直接 composer require dingo/api 必然报错。

实际可行的替代路径是:放弃原版 Dingo,改用社区维护的兼容分支 —— kitloong/laravel-dingo-api,它已适配 Laravel 9–11,并保持 Dingo 的路由、版本控制、响应格式等核心行为。

  • 运行 composer require kitloong/laravel-dingo-api
  • 发布配置:php artisan vendor:publish --provider="KitLoong\LaravelDingoApi\DingoApiServiceProvider"
  • 检查生成的 config/api.php,确认 'version' => 'v1' 和 'prefix' => 'api' 符合预期

注册 API 路由时为什么 Route::api() 不生效

KitLoong 分支不再提供 Route::api() 这类自定义路由宏 —— 它复用 Laravel 原生路由,但要求所有 API 路由必须显式绑定到 api 中间件组,并通过 api 路由前缀或独立域名隔离。

正确写法是:

// routes/api.php
use Illuminate\Support\Facades\Route;

Route::middleware('api')->prefix('v1')->group(function () {
    Route::get('/users', [UserController::class, 'index']);
    Route::post('/posts', [PostController::class, 'store']);
});
  • 不能漏掉 ->middleware('api'),否则 Dingo 的请求解析(如版本提取、响应包装)不会触发
  • prefix('v1') 是手动实现版本控制,KitLoong 默认不自动解析 URL 中的 v1,需在控制器中用 $request->route()->parameter('version') 手动取值
  • 若要用子域名(如 api.example.com),需在 config/api.php 中设 'domain' => 'api.example.com',并确保路由定义在 Route::domain(...)->group(...) 内

返回 JSON 响应时出现 Call to undefined method Dingo\Api\Routing\Router::response()

这是典型误用旧 Dingo 文档的结果。KitLoong 分支已移除全局 app('api.router') 和 app('api.response') 实例,也不再支持 $this->response->item(...) 这类链式调用。

laravel-specialist
laravel-specialist

精通 Laravel 10+,遵循现代 PHP 实践的 Laravel 专家。擅长优雅语法、Eloquent ORM、队列系统及企业级特性...

下载

现在统一走 Laravel 原生响应 + Dingo 的格式中间件:

  • 控制器中直接返回数组或模型:return ['data' => $user]; 或 return User::first();
  • Dingo 的 TransformsResponses trait 只在你主动继承 Dingo\Api\Http\Controller 时才可用,但该基类已过时,不推荐
  • 如需数据转换(比如加 data 包裹、分页元信息),改用 Laravel 自带的 API Resource:return new UserResource($user);
  • 确保 app/Http/Kernel.php 中 api 中间件组包含 \KitLoong\LaravelDingoApi\Http\Middleware\RespondWithJson::class

调试时看不到 Dingo 的错误堆栈或 HTTP 状态码不对

Dingo 的异常处理层被 KitLoong 替换为 Laravel 原生异常渲染流程,所以 APP_DEBUG=true 下看到的是 Laravel 错误页,而非 Dingo 风格的 JSON error 响应。

要让 API 请求返回结构化错误(如 404 → {"message":"Not Found"}),需确保:

  • 请求头带 Accept: application/json,否则 Laravel 会返回 HTML 错误页
  • 在 app/Exceptions/Handler.php 的 render() 方法中,对 API 请求强制转 JSON:
public function render($request, Throwable $e)
{
    if ($request->is('api/*') || $request->expectsJson()) {
        return response()->json([
            'message' => $e->getMessage(),
        ], $e->getCode() ?: 500);
    }

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

这个逻辑比依赖 Dingo 的异常处理器更可控,也避免了多层异常捕获导致状态码被覆盖的问题。

真正难搞的是版本协商和内容协商细节 —— 比如同时支持 Accept: application/vnd.app.v1+json 和 URL 版本,KitLoong 默认只认前者,后者得自己写中间件解析 Request::route('version') 并塞进请求属性里。这种定制点容易被忽略,但恰恰是 API 稳定性的关键。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

10824

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

6321

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2135

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

3988

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4694

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3691

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

5277

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

4142

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

12042

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习