在laravel中设置会话变量

时间:2015-02-09 19:33:30

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

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

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

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

11 个答案:

答案 0 :(得分:44)

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

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

要获取变量,您可以使用...

Session::get('variableName');

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

Event::listen('auth.login', function()
{
    Session::set('variableName', $value);
});

答案 1 :(得分:18)

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

  

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

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

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

<强>配置

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

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

您可以通过Config::get('companyname.somevalue')

从应用程序的任何位置访问此值

<强>会话

如果您打算存储的值与每个用户的不同,则最合理的位置是Session。这是您在问题中提到的内容,但您使用的语法不正确。在Session中存储变量的正确语法是:

Session::put('somekey', 'somevalue');

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

Session::get('somekey');

至于执行这些操作时,这有点取决于你。如果使用Laravel 5,我可能会在Laravel 4.x或route filter上选择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'))
   ;
});

答案 2 :(得分:5)

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

<form method="post" action="#">
name <input type="text" name="na" />
Male <input type="radio" name="r" value="Male" />
Female <input type="radio" name="r" value="FeMale" />
<input type="submit" name="sbt" onclick="return confirm('are sure');"  />
</form>

</body>
</html>

<?php
$a ="";
if(isset($_POST['sbt']))
{
    echo $a=
}

?>

要检索它就像

一样简单
  session(['variableName'=>$value]);

答案 3 :(得分:4)

在Laravel 5.4中

使用此方法:

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

答案 4 :(得分:3)

例如,要在会话中存储数据,通常会使用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 :(得分:1)

你可以尝试

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

答案 6 :(得分:1)

要添加到上述答案中,请确保您按以下方式定义函数:

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 :(得分:1)

php artisan make:controller SessionController --plain

然后

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class SessionController extends Controller {
   public function accessSessionData(Request $request) {
      if($request->session()->has('my_name'))
         echo $request->session()->get('my_name');
      else
         echo 'No data in the session';
   }
   public function storeSessionData(Request $request) {
      $request->session()->put('my_name','Ajay kumar');
      echo "Data has been added to session";
   }
   public function deleteSessionData(Request $request) {
      $request->session()->forget('my_name');
      echo "Data has been removed from session.";
   }
}
?>

所有路线:

Route::get('session/get','SessionController@accessSessionData');
Route::get('session/set','SessionController@storeSessionData');
Route::get('session/remove','SessionController@deleteSessionData');

更多帮助:How To Set Session In Laravel?

答案 8 :(得分:0)

在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 :(得分:0)

要设置会话,您可以尝试以下操作:

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

还可以通过以下方法获取会话数据:

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

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

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

答案 10 :(得分:0)

如果您想要持久化会话,

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

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

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

echo session('key');

方法二:将下面一行从protected $middlewareGroups的{​​{1}}移动到app\Http\Kernel.php数组作为第一行

protected $middleware

确保存储目录有写权限

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

不要使用chmod -R a+rw storage/ 来验证会话,使用dd()