在我的一个应用程序中,我拥有整个应用程序所需的属性。
应用程序的多个不同部分需要访问,例如请求,本地和全局作用域以及命令。
我想在请求期间“缓存”该属性。
我在Game
类中当前的解决方案如下:
/**
* Get current game set in the .env file.
* @return Game
*/
public static function current()
{
return Cache::remember('current_game', 1, function () {
static $game = null;
$id = config('app.current_game_id');
if ($game === null || $game->id !== $id) {
$game = Game::find($id);
}
return $game;
});
}
我可以使用Game::current()
来成功调用此方法,但是此解决方案感觉很“ hacky”,并且会在多个请求过程中保持缓存状态。
我尝试在当前请求对象上放置一个属性,但是该属性对命令不可用,并且在刀片视图和对象中似乎无法访问(未传递$request
变量。
其用法的另一个示例如下所述:
class Job extends Model
{
/**
* The "booting" method of the model.
*
* @return void
*/
protected static function boot()
{
parent::boot();
static::addGlobalScope('game_scope', function (Builder $builder) {
$builder->whereHas('post', function ($query) {
$query->where('game_id', Game::current()->id);
});
});
}
}
我认为我无法通过这种引导方法轻松访问request属性。
我的另一个想法是将变量存储在Game
Facade上,但是我找不到有关此做法的任何文档。
您能帮我找到一种在大多数情况下(如果不是全部情况下)“访问” Game::current()
属性的方法,而无需使用“ hacky”方法的方法。
答案 0 :(得分:0)
像这样使用全局会话帮助器:
// Retrieve a piece of data from the session...
$value = session('key');
// Store a piece of data in the session...
session(['key' => 'value']);
有关配置信息和更多选项:https://laravel.com/docs/5.7/session