在 laravel 中设置会话变量
2022-08-30 11:34:38
我想以这种方式使用laravel在会话中设置一个变量
Session::set('variableName')=$value;
但问题是我不知道把这个代码放在哪里,因为我想设置一次(当客人访问主页或任何其他页面时)?主要思想是使用全局变量在所有应用程序控制器中使用它,我听说过与配置变量相关的内容,但我不确定使用配置变量还是仅使用会话是一个好主意?谢谢
我想以这种方式使用laravel在会话中设置一个变量
Session::set('variableName')=$value;
但问题是我不知道把这个代码放在哪里,因为我想设置一次(当客人访问主页或任何其他页面时)?主要思想是使用全局变量在所有应用程序控制器中使用它,我听说过与配置变量相关的内容,但我不确定使用配置变量还是仅使用会话是一个好主意?谢谢
正确的语法是:
Session::set('variableName', $value);
对于 Laravel 5.4 及更高版本,正确的方法是:put
Session::put('variableName', $value);
要获取该变量,您可以使用:
Session::get('variableName');
如果你需要设置一次,我会弄清楚你什么时候想要设置它,并用它来做。Events
例如,如果您想在有人登录时进行设置,则可以使用:
Event::listen('auth.login', function() {
Session::set('variableName', $value);
});
我认为你的问题最终可以归结为:
在哪里可以设置可在应用程序中全局访问的长期值?
显而易见的答案是,这要视情况而定。它所依赖的是几个因素:
配置
如果每个值都相同并且很少更改,则可能将其放在下面的配置文件中的最佳位置,例如:app/config
app/config/companyname.php
<?php
return [
'somevalue' => 10,
];
您可以通过以下方式从应用程序中的任何位置访问此值:Config::get('companyname.somevalue')
会期
如果您打算存储的值对于每个用户来说都是不同的,则最合乎逻辑的位置是 。这是您在问题中提到的,但是您使用的语法不正确。在会话中存储变量的正确语法是:Session
Session::put('somekey', 'somevalue');
稍后检索它的正确语法是:
Session::get('somekey');
至于何时执行这些操作,这有点取决于您。如果在Laravel 4.x上,我可能会选择路由过滤器,如果使用Laravel 5,我可能会选择中间件。下面是使用路由筛选器的示例,该筛选器利用另一个类来实际提供该值:
// 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'))
;
});