1

我正在尝试使用Dingo Api将用户特定的元数据添加到每个 API 响应中。我认为这将在AddMetadata中间件中完成:

<?php

namespace App\Http\Middleware\Api;


use Closure;
use Dingo\Api\Http\Request;

class AddMetadata {
    
    public function handle(Request $request, Closure $next)
    {
        $response = $next($request);
        /*
         * Dingo API response has the ability to modify metadata responses
         */
        if ($response instanceof \Dingo\Api\Http\Response) {
            $oldMeta = $response->getMeta();
            $meta = array_merge($oldMeta, $request->user()->metadata());
            $response->setMeta($meta);
        }
        return $response;
    }
}

我发现此时的响应不再是Dingo API响应,因此我无法添加元数据。我尝试使用该Dingo\Api\Http\Response::makeFromExisting()方法从旧请求创建新响应,我也尝试实例化新响应,但似乎在到达中间件之前处理了 Dingo Api 响应。

将特定于用户的元数据添加到响应中的最有效方法是什么?理想情况下,我不想将它单独添加到每个 API 端点。

4

0 回答 0