簡體   English   中英

如何在Laravel中加載任何內容之前設置會話變量?

[英]How to set a session variable before anything loads in Laravel?

我想在Laravel中的任何內容加載之前基於URL(例如http://de.domain.comhttp://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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM