[英]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']);
設置會話你可以試試這個:
$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 $middlewareGroups
的app\\Http\\Kernel.php
到protected $middleware
數組作為第一線
\Illuminate\Session\Middleware\StartSession::class,
確保存儲目錄具有寫權限
chmod -R a+rw storage/
不要使用dd()
來驗證會話,使用print_r()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.