簡體   English   中英

在 Laravel 中設置會話變量

[英]Set session variable in laravel

我想以這種方式使用 laravel 在會話中設置一個變量

Session::set('variableName')=$value;

但問題是我不知道把這段代碼放在哪里,因為我想設置一次(當客人訪問主頁或任何其他頁面時)? 主要想法是使用全局變量在所有應用程序控制器中使用它,我聽說過與配置變量相關的內容,但我不確定使用配置變量還是僅使用會話是一個好主意? 謝謝

正確的語法是:

Session::set('variableName', $value);

對於 Laravel 5.4 及更高版本,正確的使用方法是put

Session::put('variableName', $value);

要獲取變量,您將使用:

Session::get('variableName');

如果您需要設置一次,我會弄清楚您想要設置的確切時間並使用Events來完成。

例如,如果您想在有人登錄時設置它,您可以使用:

Event::listen('auth.login', function() {
    Session::set('variableName', $value);
});

我認為你的問題最終可以歸結為:

我在哪里可以設置在我的應用程序中全局訪問的長期值?

顯而易見的答案是視情況而定。 它取決於幾個因素:

  • 價值會有所不同,還是對每個人都一樣?
  • 長壽究竟是多久? (永遠?一天?一次瀏覽“會話”?)

配置

如果每個人的值都相同並且很少更改,那么最好將它放在app/config下的配置文件中,例如app/config/companyname.php

<?php
return [
    'somevalue' => 10,
];

您可以通過Config::get('companyname.somevalue')從應用程序的任何位置訪問此值

會議

如果您打算存儲的值對於每個用戶都不同,那么將它放在Session最合乎邏輯。 這就是您在問題中提到的內容,但您使用的語法不正確。 在 Session 中存儲變量的正確語法是:

Session::put('somekey', 'somevalue');

稍后檢索它的正確語法是:

Session::get('somekey');

至於何時執行這些操作,這取決於您。 我可能會選擇路由過濾器,如果在Laravel 4.x或中間件,如果使用Laravel 5.下面是使用路由過濾器,它利用另一個類實際拿出價值的例子:

// File: ValueMaker.php (saved in some folder that can be autoloaded)
class ValueMaker
{
    public function makeValue()
    {
        return 42;
    }
}

// File: app/filters.php is probably the best place
Route::filter('set_value', function() {
    $valueMaker = app()->make('ValueMaker');
    Session::put('somevalue', $valueMaker->makeValue());
});

// File: app/routes.php
Route::group(['before' => 'set_value'], function() {
   // Value has already been 'made' by this point. 
   return View::make('view')
       ->with('value', Session::get('somevalue'))
   ;
});

在 Laravel 5.6 中,您需要將其設置為:

session(['variableName' => $value]);

要檢索它,就像這樣簡單:

$variableName = session('variableName');

例如,要在會話中存儲數據,您通常會使用put方法或session助手:

// Via a request instance...
$request->session()->put('key', 'value');

要么

// Via the global helper...
session(['key' => 'value']);

要從會話中檢索項目,您可以使用get

$value = $request->session()->get('key', 'default value');

或全局session助手:

$value = session('key', 'default value');

要確定會話中是否存在項目,您可以使用has方法:

if ($request->session()->has('users')) {
//
}

在 Laravel 5.4 中

使用這個方法:

Session::put('variableName', $value);

要添加到上述答案,請確保像這樣定義函數:

public function functionName(Request $request)  {
       //
}

注意“(Request $request)”,現在設置一個這樣的會話:

$request->session()->put('key', 'value');

並以這種方式檢索會話:

$data = $request->session()->get('key');

要擦除會話試試這個:

$request->session()->forget('key');  

要么

$request->session()->flush();

你可以試試

 Session::put('variable_Name', "Your Data Save Successfully !");  
 Session::get('variable_Name');

在 Laravel 6.x 中

// Retrieve a piece of data from the session...
$value = session('key');

// Specifying a default value...
$value = session('key', 'default');

// Store a piece of data in the session...
session(['key' => 'value']);

https://laravel.com/docs/6.x/session

設置會話你可以試試這個:

$request->session()->put('key','value');

也可以嘗試獲取會話數據:

$request->session()->get('key');

如果要獲取所有會話數據:

$request->session()->all();

如果你想要持久性會話,

方法一:使用session()->save()Session::save()

session(['key' => 'value']);
//or
session()->put('key', 'value');

//then
session()->save();

echo session('key');

方法2:將波紋管線從protected $middlewareGroupsapp\\Http\\Kernel.phpprotected $middleware數組作為第一線

\Illuminate\Session\Middleware\StartSession::class,

確保存儲目錄具有寫權限

chmod -R a+rw storage/

不要使用dd()來驗證會話,使用print_r()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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