7

我想用laravel這樣設置會話變量

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

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

+1

這是非法的PHP。賦值操作的左邊不能是表達式。 'set()'是一個函數/方法調用 - 它只能返回一個值,你不能給它賦值。 – 2015-02-09 19:38:07

+0

這裏有很好的記錄:http://laravel.com/docs/5.0/session – baao 2015-02-09 19:56:15

回答

27

這樣做的正確的語法是...

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

爲了得到變量,你使用...

Session::get('variableName'); 

如果您需要設置一次,我'找出你想要什麼時候設置並使用事件來做到這一點。例如,如果你想,當有人登錄時設置它,你會使用...

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

請告訴我我們可以使用此事件的地方? – Uzair 2017-04-11 08:18:34

+1

在路由或控制器? – Uzair 2017-04-11 08:18:51

+0

你可能想爲它創建一個服務提供者並把它放在那裏。 – user3158900 2017-04-11 17:20:23

13

我認爲你的問題最終都可以歸結到這一點:

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

顯而易見的答案是,它取決於。它取決於以下幾個因素:

  • 價值會不一樣嗎?或者它是否會對每個人都一樣?
  • 多久才能長命? (永遠?的一天呢?一個瀏覽「會話」?)

配置

如果該值是對每個人都是相同的,很少會發生變化,對可能提出它是在配置最好的地方文件在app/config之下的某處,例如app/config/companyname.php

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

你可以在應用程序的任何地方通過Config::get('companyname.somevalue')

會議

訪問此值如果您打算存儲值將是不同爲每個用戶,最合理的地方是Session。這是你提到的問題,但是你使用的語法不正確。正確的語法爲變量存儲在會話是:

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

正確的語法來檢索回來了更高:

Session::get('somekey'); 

至於執行這些操作,這是一個小由你決定。我可能會選擇使用Laravel 5. Laravel 4.x的一個route filter如果還是Middleware如果下面是使用路由過濾器,它利用另一個類實際拿出價值的例子:

// 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')) 
    ; 
}); 
+0

upvote因爲hhtg :-)以及好的和全面的答案。 – Tschallacka 2015-07-23 09:31:10

2
在Laravel 5.4

使用這種方法:

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