簡體   English   中英

如何在 Laravel 5.6 json 響應中將空值轉換為空字符串?

[英]How to convert null values to empty string in Laravel 5.6 json response?

我的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 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,

$middleware

這應該可以解決問題。 我沒有親自測試過,我只是在旅途中測試過,如果您有問題,請告訴我。

盧卡

返回前添加此函數

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM