7

Chciałbym ustawić zmienną w sesji używając laravel tędyustawiona zmienna sesja w laravel

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

ale problemem jest to, że nie wiem gdzie umieścić ten kod, bo chciałbym ustawić go na raz (kiedy gość odwiedza stronę główną lub dowolną inną stronę)? Główną ideą jest użycie zmiennej globalnej do użycia jej we wszystkich kontrolerach aplikacji, słyszałem o czymś związanym ze zmiennymi konfiguracyjnymi, ale nie jestem pewien, czy będzie to dobry pomysł na użycie zmiennych konfiguracyjnych czy tylko sesji? Dzięki

+1

że PHP jest nielegalne. lewa strona operacji przypisania nie może być wyrażeniem. 'set()' jest wywołaniem funkcji/metody - może tylko POWRÓCIĆ wartość, nie można jej przypisać. –

+0

To jest bardzo dobrze udokumentowane tutaj: http://laravel.com/docs/5.0/session – baao

Odpowiedz

27

Poprawna składnia to ...

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

aby uzyskać zmienną, można użyć ...

Session::get('variableName'); 

Jeśli trzeba ustawić go raz, "wymyśl, kiedy dokładnie chcesz to ustawić i użyj zdarzeń, aby to zrobić. Na przykład, jeśli chcesz ustawić go, gdy ktoś zaloguje się, można użyć ...

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

Proszę mi powiedzieć, gdzie możemy skorzystać z tego wydarzenia? – Uzair

+1

w trasach lub kontrolerach? – Uzair

+0

Prawdopodobnie chcesz utworzyć dostawcę usług i umieścić go w tym miejscu. – user3158900

13

Myślę, że pytanie może być ostatecznie sprowadza się do tego:

Gdzie mogę ustawić długowieczna wartość, która jest dostępna globalnie w mojej aplikacji?

Oczywistą odpowiedzią jest to, że to zależy. Zależy od tego kilka czynników:

  • Czy wartość będzie inna, czy też będzie taka sama dla wszystkich?
  • Jak długo dokładnie jest długowieczna? (Na zawsze? A Day? Jeden przeglądania „sesja”?)

Config

Jeśli wartość jest taka sama dla wszystkich i rzadko się zmieniają, najlepsze miejsce prawdopodobnie umieścić go w konfiguracji plik gdzieś pod app/config, np app/config/companyname.php:

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

Można uzyskać dostęp do tej wartości z dowolnego miejsca w aplikacji poprzez Config::get('companyname.somevalue')

Session

Jeżeli wartość masz zamiar sklepu będzie inny dla każdego użytkownika , najbardziej logicznym miejscem do umieszczenia go jest Session. Oto, o czym wspominasz w swoim pytaniu, ale używasz niewłaściwej składni.Poprawna składnia do przechowywania zmiennej w sesji jest:

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

poprawna składnia, aby odzyskać go z powrotem później jest:

Session::get('somekey'); 

miarę gdy do wykonywania tych czynności, to trochę zależy od Ciebie. Prawdopodobnie wybrać route filter jeśli na laravel 4.x lub Middleware przypadku korzystania laravel 5. Poniżej jest przykład przy użyciu filtra trasy, który wykorzystuje inną klasę rzeczywiście pochodzić z wartości:

// 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

przejęcie ze względu na hhtg :-) oraz dobrą i wyczerpującą odpowiedź. – Tschallacka

2

w laravel 5.4

stosowanie tej metody:

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