Laravel 请求具有静态值的宏

Laravel Request Macro With Static Values

我试图在请求宏中创建一个延迟加载模式,该模式将在请求的生命周期内缓存值。

我把它放在我的 App\Providers\RouteServiceProvider boot() 函数中:

Request::macro('foo', function() {
    static $bar;

    if (is_null($bar)) {
        $bar = 'was not null';
        return 'was null';
    }

    return $bar;
});

每次我调用 request()->foo()Request::foo() 它 returns 'was null'.

我的问题有两个:

  1. 我应该如何完成这个模式?
  2. 为什么它不像写的那样工作?

我发现我可以通过这种方式完成模式:

Request::macro('foo', function() {
    if (! isset(request()->bar)) {
        request()->bar = 'was not null';
        return 'was null';
    }

    return request()->bar;
});

不过,我还没有找到问题 2 的答案。