laravel 5 - 跨控制器共享变量(不渲染视图)

时间:2015-08-26 10:33:51

标签: php laravel laravel-5

我有一个使用Laravel开发的小应用程序,我想在所有控制器之间共享一个变量(来自远程服务的结果,缓存)。

我读到了关于ViewComposer的内容,但是它们只能运行一个视图(有意义),而且我的应用程序有很多json响应。

我知道我传统上可以从BaseController扩展我的控制器,但是我想知道是否有人知道如何在不依赖继承的情况下做到这一点。

2 个答案:

答案 0 :(得分:2)

将该结果放入一个负责缓存的对象中,您可以将该类引入控制器 - 无论是在构造函数中还是在特定的路由方法中。

(如果你正在使用laravel的缓存服务,那么你可以注入它而不需要额外的工作。)

超级基本的例子:

class CachedResult {

  public function result() {
      return 'woo! caching';
  }

}

...
// in your controller...
public function someJsonRoute(CachedResult $result) {
    $result->result();
}

...
// in your AppServiceProvider's register method
$this->app->singleton(CachedResult::class, function() { return new CachedResult; });

答案 1 :(得分:0)

您可以在基本控制器中声明远程服务的变量和/或函数。

在扩展基本控制器的控制器中,您可以像这样使用它:

$这 - >的varName;