【问题标题】:Set session variable in laravel在 laravel 中设置会话变量
【发布时间】:2015-04-09 15:59:27
【问题描述】:

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

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

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

【问题讨论】:

  • 那是非法的 PHP。赋值操作的左边不能是表达式。 set() 是一个函数/方法调用——它只能返回一个值,你不能给它赋值。
  • 这里有很好的记录:laravel.com/docs/5.0/session

标签: php laravel session-variables laravel-routing application-variables


【解决方案1】:

正确的语法是:

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);
});

【讨论】:

  • 请告诉我在哪里可以使用此活动?
  • 在路由或控制器中?
  • 您可能希望为其创建一个服务提供者并将其放入其中。
  • @user3158900,为什么需要服务商?
【解决方案2】:

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

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

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

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

配置

如果每个人的值都相同并且很少更改,则最好将其放置在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,我可能会选择 route filter,如果使用 Laravel 5,我可能会选择 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'))
   ;
});

【讨论】:

  • 因为 hhtg :-) 以及良好而全面的答案而投票。
【解决方案3】:

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

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

要检索它,很简单:

$variableName = session('variableName');

【讨论】:

  • 我可以从任何控制器中检索它吗?
  • 是的,会话是一种存储信息(以变量形式)以供跨多个页面使用的方式
【解决方案4】:

例如,要在会话中存储数据,您通常会使用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')) {
//
}

【讨论】:

    【解决方案5】:

    在 Laravel 5.4 中

    使用这个方法:

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

    【讨论】:

      【解决方案6】:

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

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

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

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

      并以这种方式检索会话:

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

      要删除会话,试试这个:

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

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

      【讨论】:

        【解决方案7】:

        你可以试试

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

        【讨论】:

        • 这用于在会话中存储值 \Session::put('variable_Name', "Your Data Save Successfully !");这是使用 Session::get('variable_Name');获取我存储在会话中的值
        【解决方案8】:

        在 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

        【讨论】:

          【解决方案9】:

          如果您想要持久会话,

          方法一:使用session()-&gt;save()Session::save()

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

          方法2:将下面的行从app\Http\Kernel.phpprotected $middlewareGroups移动到protected $middleware数组作为第一行

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

          确保存储目录有写权限

          chmod -R a+rw storage/
          

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

          【讨论】:

            【解决方案10】:

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

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

            还可以尝试以下方法获取会话数据:

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

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

            $request->session()->all();
            

            【讨论】:

              猜你喜欢
              • 2018-05-02
              • 1970-01-01
              • 1970-01-01
              • 2019-11-26
              • 2011-08-24
              • 2012-07-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多