我想在laravel 5.4 的 AppServiceProvider 中注册两个 singleton 方法。 像这样:
public function register()
{
app()->singleton('isJson', function ($app, $args) {
dd($args); // return empty Array
return is_string($args[0]) && is_array(json_decode($args[0], TRUE)) && (json_last_error() == JSON_ERROR_NONE);
});
app()->singleton('jsonDecode', function ($app, $args) {
dd($args); // return ['0' =>10000]
if (!$app->make('isJson', $args)) // here I sent same array to isJson
return $args[0];
return array_map(function ($item) use ($app) {
return !$app->make('isJson', [$item]) ? $item : $app->make('jsonDecode', [$item]);
}, json_decode($args[0], TRUE));
});
}
如您所见,我在isJson
中使用jsonDecode
来检查发送的参数是否为json格式的文本。
例如,现在每当我这样叫jsonDecode
时:
app('jsonDecode', ['0' =>10000]);
args
在jsonDecode
方法中完全接收相同的数组,但是当将其发送到isJson
方法时,它总是返回一个空数组。
运行时发生的事情在上面的代码中显示为注释(此dd
方法)。