首页 > 解决方案 > 具有静态值的 Laravel 请求宏

问题描述

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

我把它放在我的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()它返回'是空的'。

我的问题有两个:

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

标签: phplaravelrequestlazy-loading

解决方案


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

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

    return request()->bar;
});

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


推荐阅读