如何在运行时设置一个对所有请求都可见的全局变量?登录用户后,我需要保存数据库连接的数据并在所有请求中连接到他的数据库(使用中间件)。
我刚刚证明了PHP的$GLOBALS
和Laravel的app()->singleton()
,但是,在这两种情况下,我都失去了变量的内容。为什么?
我该如何解决?我不想把db数据放到会话或缓存中。
答案 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;
请注意,如果新连接失败并且我没有对代码进行测试,则无法处理错误。但这可能足以帮助您入门。