7

Ich mag würde eine Variable in der Sitzung setzen Laravel mit dieser Art und WeiseSet Session-Variable in Laravel

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

aber das Problem ist, dass ich weiß nicht, wo Sie diesen Code setzen, denn ich möchte Einmal einstellen (wenn der Gast die Homepage oder eine andere Seite besucht)? Die Hauptidee ist, eine globale Variable zu verwenden, um es in allen Anwendungscontrollern zu verwenden, hörte ich etwas in Bezug auf Konfigurationsvariablen, aber ich bin mir nicht sicher, ob es eine gute Idee ist, Konfigurationsvariablen oder nur die Sitzung zu verwenden? Dank

+1

, die illegal PHP ist. Die linke Seite einer Zuweisungsoperation kann kein Ausdruck sein. 'set()' ist ein Funktions-/Methodenaufruf - es kann nur einen Wert zurückgeben, dem Sie keinen Wert zuweisen können. –

+0

Dies ist hier sehr gut dokumentiert: http://laravel.com/docs/5.0/session – baao

Antwort

27

Die korrekte Syntax dafür ist ...

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

die Variable erhalten, würden Sie verwenden ...

Session::get('variableName'); 

Wenn Sie es einmal einstellen müssen, ich Finde heraus wann genau du es einstellen willst und benutze Events um es zu tun. Zum Beispiel, wenn Sie es einrichten wollen, wenn jemand anmeldet, dann würden Sie verwenden ...

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

Bitte sagen Sie mir, wo wir dieses Ereignis verwenden können? – Uzair

+1

in Routen oder Controller? – Uzair

+0

Sie möchten wahrscheinlich einen Dienstanbieter dafür erstellen und dort einfügen. – user3158900

13

Ich glaube, Ihre Frage letztlich dazu werden eingekocht:

Wo kann ich ein langlebiger Wert, auf den in meiner Anwendung global zugegriffen werden kann?

Die offensichtliche Antwort ist, dass es abhängt. Worauf es ankommt sind ein paar Faktoren:

  • Wird der Wert jemals anders sein oder wird es für alle gleich sein?
  • Wie lange genau ist langlebig? (Für immer? Ein Tag? Ein Browsing ‚session‘?)

Config

Wenn der Wert für alle gleich und wird nur selten ändern, der beste Ort, wahrscheinlich um es in einer Konfiguration ist Datei irgendwo unter app/config, z app/config/companyname.php:

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

Sie diesen Wert von überall in Ihrer Anwendung zugreifen können über Config::get('companyname.somevalue')

Session

Wenn der Wert, den Sie speichern beabsichtigen, wird verschiedene für jeden Benutzer sein Der logischste Ort ist Session. Darauf beziehen Sie sich in Ihrer Frage, aber Sie verwenden falsche Syntax.Die korrekte Syntax eine Variable in Session zu speichern ist:

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

Die korrekte Syntax es aus abzurufen zurück später:

Session::get('somekey'); 

Soweit wenn diese Operationen durchzuführen, das ist ein wenig wie du willst. Ich würde wahrscheinlich ein route filter wenn auf Laravel 4.x oder Middleware bei Verwendung von Laravel wählen 5. Unten ist ein Beispiel einer Route-Filter zu verwenden, die eine andere Klasse mit dem Wert tatsächlich kommen nutzt:

// 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 wegen hhtg :-) und die gute und umfassende Antwort. – Tschallacka

2

in Laravel 5.4

Verwendung dieser Methode:

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