在laravel中设置会话变量

use*_*578 17 php session-variables application-variables laravel laravel-routing

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

Session::set('variableName')=$value;
Run Code Online (Sandbox Code Playgroud)

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

use*_*496 55

正确的语法是......

Session::set('variableName', $value);
Run Code Online (Sandbox Code Playgroud)

要获得变量,您将使用......

Session::get('variableName');
Run Code Online (Sandbox Code Playgroud)

如果你需要设置一次,我会弄清楚你想要什么时候设置它并使用事件来做.例如,如果您想在有人登录时设置它,您将使用...

Event::listen('auth.login', function()
{
    Session::set('variableName', $value);
});
Run Code Online (Sandbox Code Playgroud)

  • @user3158900,为什么需要服务提供者? (2认同)

Jef*_*ert 21

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

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

显而易见的答案是,这取决于.它取决于几个因素:

  • 价值是否会有所不同,或者对每个人来说都是一样的?
  • 多长时间是多久?(永远?一天?一个浏览'会话'?)

配置

如果每个人的值都相同并且很少会发生变化,那么最好的位置可能是在下面的某个配置文件中app/config,例如app/config/companyname.php:

<?php
return [
    'somevalue' => 10,
];
Run Code Online (Sandbox Code Playgroud)

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

会议

如果您打算存储的值对于每个用户来说是不同的,那么最合理的位置就是Session.这是您在问题中提到的内容,但您使用的语法不正确.在Session中存储变量的正确语法是:

Session::put('somekey', 'somevalue');
Run Code Online (Sandbox Code Playgroud)

以后检索它的正确语法是:

Session::get('somekey');
Run Code Online (Sandbox Code Playgroud)

至于什么时候执行这些操作,这有点取决于你.如果使用Laravel 5,我可能会在Laravel 4.x或Middleware上选择一个路由过滤器.下面是一个使用路由过滤器的示例,该过滤器利用另一个类来实际提出该值:

// 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'))
   ;
});
Run Code Online (Sandbox Code Playgroud)


Ali*_*abi 7

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

// Via a request instance...
$request->session()->put('key', 'value');
Run Code Online (Sandbox Code Playgroud)

或者

// Via the global helper...
session(['key' => 'value']);
Run Code Online (Sandbox Code Playgroud)

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

$value = $request->session()->get('key', 'default value');
Run Code Online (Sandbox Code Playgroud)

或全球session帮手:

$value = session('key', 'default value');
Run Code Online (Sandbox Code Playgroud)

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

if ($request->session()->has('users')) {
//
}
Run Code Online (Sandbox Code Playgroud)


小智 7

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

public function functionName(Request $request)  {
       //
}
Run Code Online (Sandbox Code Playgroud)

注意“(Request $request)”,现在设置一个会话,如下所示:

$request->session()->put('key', 'value');
Run Code Online (Sandbox Code Playgroud)

并以这种方式检索会话:

$data = $request->session()->get('key');
Run Code Online (Sandbox Code Playgroud)

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

$request->session()->forget('key');  
Run Code Online (Sandbox Code Playgroud)

或者

$request->session()->flush();
Run Code Online (Sandbox Code Playgroud)


lev*_*vis 6

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

  session(['variableName'=>$value]);
Run Code Online (Sandbox Code Playgroud)

检索它就像

$variableName = session('variableName')
Run Code Online (Sandbox Code Playgroud)


小智 5

在Laravel 5.4中

使用此方法:

Session::put('variableName', $value);
Run Code Online (Sandbox Code Playgroud)


小智 5

在 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']);
Run Code Online (Sandbox Code Playgroud)

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