app()-> singleton中的第二个参数是laravel 5.4中的空数组

时间:2018-08-24 11:37:17

标签: json laravel laravel-5.4

我想在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]);

argsjsonDecode方法中完全接收相同的数组,但是当将其发送到isJson方法时,它总是返回一个空数组。

运行时发生的事情在上面的代码中显示为注释(此dd方法)。

0 个答案:

没有答案