laravel中, 我們可能透過中間件來處理auth資訊, 也可能設計到一些業務邏輯的處理
這些資料在中間件中處理後, 應該存放到哪裡?
比方說userObject 這樣的對象, 又或者只是一個變量. 後續的邏輯(service層, model層, view層)都可能用到.
那在中間件中取得,處理後的資料, 應該放在哪裡. (一次請求中)
不使用框架時, 通常會隨便定義一個超級變量 在存放. MVC中似乎不太建議使用全局變量來處理. 那在laravel中, 通常是放在哪裡呢?
我知道可以存放在session app容器下. 但是感覺不是最佳的方案.
laravel中, 我們可能透過中間件來處理auth資訊, 也可能設計到一些業務邏輯的處理
這些資料在中間件中處理後, 應該存放到哪裡?
比方說userObject 這樣的對象, 又或者只是一個變量. 後續的邏輯(service層, model層, view層)都可能用到.
那在中間件中取得,處理後的資料, 應該放在哪裡. (一次請求中)
不使用框架時, 通常會隨便定義一個超級變量 在存放. MVC中似乎不太建議使用全局變量來處理. 那在laravel中, 通常是放在哪裡呢?
我知道可以存放在session app容器下. 但是感覺不是最佳的方案.
中間件只是用來過濾請求/回應的管道,資料該存資料庫那就上Eloquent或直接用DB facade,該存session就存session......
存在記憶體中。例如目前用戶,當你呼叫Auth::user
或其他跟目前認證用戶有關的程式碼時,就可能會觸發對應的UserModel 去取用戶對象,如果本次request 中還沒有生成,就去從資料庫或快取中取然後一直存在本次請求的記憶體中。
所有其他的變數、provider、binding、依賴注入、別名等等都是這個邏輯。而且具有很靈活的加載方式,以提高效能。例如路由、配置的快取和加載,例如defer。
這套是基於 Laravel 的一個核心東西:容器(container)。官方文件都是一開始就講了這些理念,文件請見 Core Concepts
Laravel 可自訂的 bootstrap 啟動流程中,一般第一個就是載入 Application,這就是一個大容器。你可以在任意地方 dd(app())
查看目前 app 中的資料載入情況。