Второй аргумент в app () -> singleton - пустой массив в laravel 5.4 - PullRequest
0 голосов
/ 24 августа 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...