gpt4 book ai didi

php - Laravel 中间件格式化响应数组的键

转载 作者:行者123 更新时间:2023-12-05 02:10:40 32 4
gpt4 key购买 nike

我正在构建 Laravel API,不喜欢带有下划线的变量格式(Angular 前端)。所以我想我构建了一个中间件,通过删除它们并将以下字母大写来重命名所有带有下划线的 json 键。

我已经构建了一个递归函数来进行重命名。但是我在响应对象和/或数据数组方面遇到了问题。而且我很确定有一种我不知道的更简洁的方法?!

到目前为止,这是我的中间件:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Log;

class ProcessOutgoingJsonMiddleware
{
/**
* Handle an outgoing response.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$response = $next($request);

if (is_array($response->getData()))
{
// Fetch json data
$json_array = $this->rename_keys($response->getData());

// Create changed response
$response->setData($json_array);
}

return $response;
}

public function rename_keys($array) {
$newArray = array();
foreach($array as $key => $value) {
$key = str_replace('_','',ucwords($key,'_'));
if(is_array($value)) $value = $this->rename_keys($value);
$newArray[$key] = $value;
}
return $newArray;
}
}

我什至没有收到错误。它只是行不通。我是否使用了 JsonResponse 类的错误方法(https://laravel.com/api/5.8/Illuminate/Http/JsonResponse.html)?还是我的递归函数有问题?

提前感谢您的帮助。 :)

最佳答案

如果您正在研究格式化应用程序的输出,最好的方法是使用宏:https://laravel.com/docs/5.8/responses#response-macros或响应资源 https://laravel.com/docs/5.8/eloquent-resources#resource-responses

来自文档:中间件提供了一种方便的机制来过滤进入您的应用程序的 HTTP 请求。

但是如果你真的想使用中间件来做到这一点:

public function handle($request, Closure $next)
{
$response = $next($request);
foreach($response->getOriginalContent()->getData() AS $key => $value) {
//handle replacing of response here
}
...
}

我不太明白“处理传出响应”是什么意思。在您的 docbloc 上,但如果您正在考虑过滤传入的 JSON POST 请求,请尝试以下方法。

public function handle($request, Closure $next)
{
$replaced = [];
foreach ($request->all() as $key => $value) {
$replaced[studly_case($key)] = $value; //Arr::studly() for Laravel 6.x
}

$request->replace($replaced);

return $next($request);
}

这应该将所有请求重命名为 StudlyCase

关于php - Laravel 中间件格式化响应数组的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58491401/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com