39

我想以这种方式使用 laravel 在会话中设置一个变量

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

但问题是我不知道把这段代码放在哪里,因为我想设置一次(当客人访问主页或任何其他页面时)?主要思想是使用全局变量在所有应用程序控制器中使用它,我听说过一些与配置变量相关的东西,但我不确定使用配置变量还是只使用会话是个好主意?谢谢

4

10 回答 10

94

正确的语法是:

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);
});
于 2015-02-09T19:45:51.007 回答
26

我认为您的问题最终可以归结为:

我可以在哪里设置一个可以在我的应用程序中全局访问的长期存在的值?

显而易见的答案是视情况而定。它取决于几个因素:

  • 价值会永远不同,还是每个人都一样?
  • 长寿究竟有多长?(永远?一天?一次浏览“会话”?)

配置

如果每个人的值都相同并且很少更改,那么最好将它放在下面的配置文件中app/config,例如app/config/companyname.php

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

您可以通过应用程序中的任何位置访问此值Config::get('companyname.somevalue')

会议

如果您打算存储的值对于每个用户来说都是不同的,那么最合乎逻辑的放置位置是Session. 这是您在问题中提到的,但您使用的语法不正确。在 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'))
   ;
});
于 2015-02-09T19:59:44.683 回答
10

在 Laravel 5.6 中,您需要将其设置为:

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

要检索它,很简单:

$variableName = session('variableName');
于 2018-03-13T10:56:42.167 回答
8

例如,要在会话中存储数据,您通常会使用put方法或session助手:

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

或者

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

要从会话中检索项目,您可以使用get

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

或全局session助手:

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

要确定会话中是否存在项目,您可以使用以下has方法:

if ($request->session()->has('users')) {
//
}
于 2018-05-29T20:10:34.773 回答
5

在 Laravel 5.4 中

使用这个方法:

Session::put('variableName', $value);
于 2017-03-16T19:14:27.573 回答
4

要添加到上述答案,请确保您像这样定义您的函数:

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

注意“(Request $request)”,现在设置一个这样的会话:

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

并以这种方式检索会话:

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

要删除会话,请尝试以下操作:

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

或者

$request->session()->flush();
于 2018-11-15T23:23:56.987 回答
3

你可以试试

 Session::put('variable_Name', "Your Data Save Successfully !");  
 Session::get('variable_Name');
于 2018-05-29T19:52:00.473 回答
3

在 Laravel 6.x 中

// Retrieve a piece of data from the session...
$value = session('key');

// Specifying a default value...
$value = session('key', 'default');

// Store a piece of data in the session...
session(['key' => 'value']);

https://laravel.com/docs/6.x/session

于 2019-12-11T21:56:15.080 回答
1

如果你想要持久性会话,

方法一:使用session()->save()Session::save()

session(['key' => 'value']);
//or
session()->put('key', 'value');

//then
session()->save();

echo session('key');

方法2:将波纹管从protected $middlewareGroupsof移动app\Http\Kernel.phpprotected $middleware数组作为第一行

\Illuminate\Session\Middleware\StartSession::class,

确保存储目录有写权限

chmod -R a+rw storage/

不要dd()用来验证会话,使用print_r()

于 2021-04-04T08:13:40.590 回答
0

设置会话你可以试试这个:

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

还要获取会话数据,您可以尝试以下操作:

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

如果要获取所有会话数据:

$request->session()->all();
于 2020-02-11T12:46:04.383 回答