我正在尝试使用 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端点。