如何在Laravel中为所有请求设置全局变量

时间:2017-02-17 20:32:28

标签: php laravel

如何在运行时设置一个对所有请求都可见的全局变量?登录用户后,我需要保存数据库连接的数据并在所有请求中连接到他的数据库(使用中间件)。

我刚刚证明了PHP的$GLOBALS和Laravel的app()->singleton(),但是,在这两种情况下,我都失去了变量的内容。为什么?

我该如何解决?我不想把db数据放到会话或缓存中。

1 个答案:

答案 0 :(得分:0)

如果尚未存储在用户的手中。对象然后我可能存储与用户的数据库连接信息。然后,如果用户已登录,我会编写一个中间件来创建连接。例如:

public function handle($request, Closure $next)
{
  if ($request->user()) {
    $connection = new mysqli('localhost', $user->dbUsername, $user->dbPassword, $user->dbName);
    $request->merge("connection" => $connection));
    return $next($request);
  }
  return redirect('login'); //the user isn't signed in
}

然后在您的代码中,您将通过以下方式使用此连接:

$this->connection = $request->connection;

请注意,如果新连接失败并且我没有对代码进行测试,则无法处理错误。但这可能足以帮助您入门。