![](/img/trans.png)
[英]How I can set session variable on click button event before auth laravel
[英]How to set a session variable before anything loads in Laravel?
我想在Laravel中的任何內容加載之前基於URL(例如http://de.domain.com或http://es.domain.com )設置會話,並認為可以在ConfigServiceProvider
做到這一點:
public function boot() {
// set language
$parse = parse_url(url());
$url_array = explode('.', $parse['host']);
if($url_array[0] == 'domain' || $url_array[0] == 'www') {
Session::put('current_language', Language::where('short', 'EN')->get());
App::setLocale('en');
} else {
Session::put('current_language', Language::where('short', strtoupper($url_array[0]))->get());
App::setLocale($url_array[0]);
}
}
但這根本不起作用。 在“ Routes
設置可以設置會話,但是在頁面加載后可以在下一頁上進行,而不是在當前頁面上進行。
最好的方法是什么? 在Routes
設置它肯定不是一個好主意
您無法在服務提供者中設置會話變量,因為在Laravel中,會話是在以下中間件中初始化的:
\Illuminate\Session\Middleware\StartSession::class
引導服務提供者時,尚未執行此中間件,因為所有中間件都在服務提供者引導階段之后執行
因此,最好的方法是在中間件中填充會話變量,然后讓中間件在Laravel StartSession
中間件之后執行,以便可以訪問該會話。
在Laravel的請求周期中,在中間件中設置變量對您來說應該足夠了:
Service Providers -> Middlewares -> Controllers -> Views
因此,在中間件中設置會話將使變量在控制器和視圖中可用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.