Я хочу зарегистрировать два метода singleton в AppServiceProvider в laravel 5.4 .как это:
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
) в вышеприведенных кодах.