如何在Laravel 5.6 json响应中将空值转换为空字符串?

时间:2018-04-01 17:04:12

标签: php json laravel null laravel-5.6

我的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中是否有内置函数将空值更改为空sting?我想找回这个json对象:

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

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果您没有任何选择而且确实需要它,您可以使用中间件来完成此操作。

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

<?php

namespace App\Http\Middleware;

use Illuminate\Database\Eloquent\Model;
use Closure;

class NullToBlank
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $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中确保添加:

\App\Http\Middleware\NullToBlank::class,
<{1>}下的

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

卢卡

答案 1 :(得分:0)

返回前添加此函数

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