net*_*djw 4 php null json laravel laravel-5.6
我收到了来自我的回复Laravel 5.6:
{
"id": 1,
"name": "Test",
"email": "anything@example.com",
"descr": null
}
Run Code Online (Sandbox Code Playgroud)
它来自这个 LaravelPHP代码:
public function show($id) {
return Client::find($id);
}
Run Code Online (Sandbox Code Playgroud)
Laravel 5.6 中是否有任何内置函数可以将空值更改为空字符串?我想取回这个 json 对象:
{
"id": 1,
"name": "Test",
"email": "anything@example.com",
"descr": ""
}
Run Code Online (Sandbox Code Playgroud)
任何的想法?
如果您别无选择并且确实需要它,则可以使用中间件来完成此操作。
使用以下代码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;
}
}
Run Code Online (Sandbox Code Playgroud)
当您只需要更改返回模型而不是相关模型的值时,就会出现这种情况。在返回+所有相关模型的情况下,则条件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);
}
Run Code Online (Sandbox Code Playgroud)
在您app/Http/Kernel.php确保添加:
\App\Http\Middleware\NullToBlank::class,
Run Code Online (Sandbox Code Playgroud)
下$middleware。
这应该可以解决问题。我没有亲自测试过,我只是在旅途中测试过,如果您有问题,请告诉我。
卢卡
| 归档时间: |
|
| 查看次数: |
4576 次 |
| 最近记录: |