Solución:
La sintaxis correcta para esto es …
Session::set('variableName', $value);
Para Laravel 5.4 y posterior, el método correcto a utilizar es put
.
Session::put('variableName', $value);
Para obtener la variable, usaría …
Session::get('variableName');
Si necesita configurarlo una vez, averiguaré exactamente cuándo desea configurarlo y usaré Eventos para hacerlo. Por ejemplo, si desea configurarlo cuando alguien inicie sesión, usaría …
Event::listen('auth.login', function()
{
Session::set('variableName', $value);
});
Creo que su pregunta, en última instancia, se puede reducir a esto:
¿Dónde puedo establecer un valor duradero que sea accesible globalmente en mi aplicación?
La respuesta obvia es que depende. De lo que depende son un par de factores:
- ¿El valor alguna vez será diferente o será el mismo para todos?
- ¿Cuánto dura exactamente? (¿Para siempre? ¿Un día? ¿Una ‘sesión’ de navegación?)
Config
Si el valor es el mismo para todos y rara vez cambiará, el mejor lugar para colocarlo probablemente sea en un archivo de configuración en algún lugar debajo app/config
, p.ej app/config/companyname.php
:
<?php
return [
'somevalue' => 10,
];
Puede acceder a este valor desde cualquier lugar de su aplicación a través de Config::get('companyname.somevalue')
Sesión
Si el valor que tiene la intención de almacenar va a ser diferente para cada usuario, el lugar más lógico para colocarlo es en Session
. Esto es a lo que alude en su pregunta, pero está utilizando una sintaxis incorrecta. La sintaxis correcta para almacenar una variable en Session es:
Session::put('somekey', 'somevalue');
La sintaxis correcta para recuperarlo más tarde es:
Session::get('somekey');
Hasta cuando para realizar estas operaciones, eso depende un poco de usted. Probablemente elegiría un filtro de ruta si estuviera en Laravel 4.xo Middleware si usara Laravel 5. A continuación se muestra un ejemplo del uso de un filtro de ruta que aprovecha otra clase para obtener el valor:
// 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'))
;
});
En Laravel 5.6, deberá configurarlo como
session(['variableName'=>$value]);
Recuperarlo es tan simple como
$variableName = session('variableName')