2
如何在運行時設置對所有請求都可見的全局變量?在登錄用戶之後,我需要保存數據庫連接的數據並在所有請求(使用中間件)連接到他的數據庫。
我剛剛證明了$GLOBALS
的PHP和app()->singleton()
的Laravel,但是,在這兩種情況下,在請求後我失去了變量的內容。爲什麼?如何爲Laravel中的所有請求設置全局變量
我該如何解決?我不想把db數據放到會話或緩存中。
如何在運行時設置對所有請求都可見的全局變量?在登錄用戶之後,我需要保存數據庫連接的數據並在所有請求(使用中間件)連接到他的數據庫。
我剛剛證明了$GLOBALS
的PHP和app()->singleton()
的Laravel,但是,在這兩種情況下,在請求後我失去了變量的內容。爲什麼?如何爲Laravel中的所有請求設置全局變量
我該如何解決?我不想把db數據放到會話或緩存中。
如果它尚未存儲在用戶的對象,那麼我可能會存儲與用戶的數據庫連接信息。然後,我會寫一箇中間件創建連接,如果用戶登錄喜歡的東西:
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;
請注意,如果新連接失敗,並且沒有測試代碼,則沒有錯誤處理。但是這可能足以讓你開始。
你爲什麼要存儲數據庫會話?你有每個用戶的個人數據庫嗎?是否有理由不能關閉數據庫連接並重新打開它與每個請求? – Blakethepatton
另外值得注意的是,全局變量只在運行時設置,這意味着它們在請求之間不是永久的。此外,數據庫連接將在一定數量的非活動狀態後過期,如果您的代碼依賴於該連接處於活動狀態,則可能會遇到一些問題。 – Blakethepatton
您需要閱讀多租戶應用程序結構...有一篇有趣的博客文章...它使用雄辯的範圍......看一看,它可能會給你一些關於如何實現你想... http://jkwl.io/application-architecture/2015/02/16/multi-tenancy-in-laravel5.html – Serge