web-dev-qa-db-fra.com

Définir la variable de session en laravel

Je voudrais définir une variable dans la session en utilisant laravel de cette façon

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

mais le problème est que je ne sais pas où mettre ce code, parce que j'aimerais le définir pour une fois (lorsque l'invité visite la page d'accueil ou toute autre page)? L'idée principale est d'utiliser une variable globale à utiliser dans tous les contrôleurs d’application, j’ai entendu parler de quelque chose lié aux variables de configuration mais je ne suis pas sûr que ce soit une bonne idée d’utiliser des variables de configuration ou seulement la session? Merci.

15
user3429578

La syntaxe correcte pour cela est ...

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

Pour obtenir la variable, vous utiliseriez ...

Session::get('variableName');

Si vous avez besoin de le configurer une fois, je saurais quand exactement vous le souhaitez et utiliser Events pour le faire. Par exemple, si vous voulez le définir quand quelqu'un se connecte, vous utiliseriez ...

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

Je pense que votre question peut finalement se résumer à ceci:

Où puis-je définir une valeur de longue durée accessible de manière globale dans mon application?

La réponse évidente est que cela dépend. Cela dépend de deux facteurs:

  • La valeur sera-t-elle un jour différente ou sera-t-il le même pour tout le monde?
  • Combien de temps dure exactement la vie? (Pour toujours? Un jour? Une 'session' de navigation?)

Config

Si la valeur est la même pour tout le monde et ne changera que rarement, le meilleur endroit pour la placer est probablement dans un fichier de configuration, quelque part sous app/config, par exemple. app/config/companyname.php:

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

Vous pouvez accéder à cette valeur depuis n’importe où dans votre application via Config::get('companyname.somevalue').

Session

Si la valeur que vous souhaitez stocker va être différente pour chaque utilisateur, l'emplacement le plus logique pour la placer est dans Session. C'est ce à quoi vous faites allusion dans votre question, mais vous utilisez une syntaxe incorrecte. La syntaxe correcte pour stocker une variable dans Session est la suivante:

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

La syntaxe correcte pour le récupérer ultérieurement est la suivante:

Session::get('somekey');

En ce qui concerne when pour effectuer ces opérations, c'est un peu à vous. Je choisirais probablement un filtre route si sur Laravel 4.x ou Middleware si vous utilisez Laravel 5. Vous trouverez ci-dessous un exemple d'utilisation d'un filtre de route qui exploite une autre classe pour obtenir la valeur suivante:

// 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'))
   ;
});
14
Jeff Lambert

à Laravel 5.4

utilisez cette méthode:

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

Dans Laravel 5.6, vous devrez le définir comme

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

Pour le récupérer est aussi simple que 

$variableName = session('variableName')
3
levis

Tu peux essayer 

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

Par exemple, pour stocker des données dans la session, vous utiliserez généralement l'assistant putmethod ou session:

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

ou

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

pour récupérer un élément de la session, vous pouvez utiliser get:

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

ou assistant global session

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

Pour déterminer si un élément est présent dans la session, vous pouvez utiliser la méthode has:

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

Pour ajouter aux réponses ci-dessus, assurez-vous de définir votre fonction comme suit:

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

Notez le "(Request $ request)", définissez maintenant une session comme ceci:

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

Et récupérez la session de cette façon:

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

Pour effacer la session, essayez ceci:

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

ou

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