如何将NULL值转换为Laravel 5.6 JSON响应中的空字符串



我从我的 Laravel 5.6

中得到了此响应
{
    "id": 1,
    "name": "Test",
    "email": "anything@example.com",
    "descr": null
}

它来自此Laravel PHP代码:

public function show($id) {
    return Client::find($id);
}

Laravel 5.6中是否有内置功能将空值更改为空刺?我想回到这个json对象:

{
    "id": 1,
    "name": "Test",
    "email": "anything@example.com",
    "descr": ""
}

有什么想法?

如果您没有任何选择,并且确实需要它,则可以使用中间件进行此操作。

在文件夹app/Http/Middleware中使用以下代码创建一个名为NullToBlank.php的文件:

<?php
namespace AppHttpMiddleware;
use IlluminateDatabaseEloquentModel;
use Closure;
class NullToBlank
{
    /**
     * Handle an incoming request.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $output = $next($request);
        if($output instanceof Model)
            return response()->json(array_map(function ($value) {
                return $value === null ? '' : $value;
            }, $output->toArray()));
        return $output;
    }
}

当您仅在返回的模型而不是相关模型上更改值时,就是这种情况。如果返回 所有相关模型,则条件if($output instanceof Model)更改为:

if($output instanceof Model) {
    $modelAsArray = $output->toArray();
    array_walk_recursive($modelAsArray, function (&$item, $key) {
        $item = $item === null ? '' : $item;
    });
    return response()->json($modelAsArray);
}

在您的app/Http/Kernel.php中,请确保添加:

AppHttpMiddlewareNullToBlank::class,

$middleware

这应该解决问题。我没有亲自测试过,我只是在旅途中做过,如果您有问题,请告诉我。

luca

在返回之前添加此功能

array_walk_recursive($array, function(&$item){
    $item = strval($item);
});

相关内容

  • 没有找到相关文章