如何在 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
}
来自这个LaravelPHP
代码:
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
。
这应该可以解决问题。我没有亲自测试过,我只是在路上做的,如果你有问题,请告诉我。
卢卡
在return
之前添加此功能
array_walk_recursive($array,function(&$item){$item=strval($item);});
我的 Laravel 5.6
有这样的回复:
{
"id": 1,
"name": "Test",
"email": "anything@example.com",
"descr": null
}
来自这个LaravelPHP
代码:
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
。
这应该可以解决问题。我没有亲自测试过,我只是在路上做的,如果你有问题,请告诉我。
卢卡
在return
之前添加此功能array_walk_recursive($array,function(&$item){$item=strval($item);});