【问题标题】:Laravel session won't changeLaravel 会话不会改变
【发布时间】:2020-03-27 09:56:45
【问题描述】:

我正在尝试使用“site_lang”会话密钥更改网站语言。这是控制器

public function __construct()
{

    if( !session()->has( 'site_lang' ) ) { session(['site_lang' => 'en']); }
    $this->lang = session()->get('site_lang');
    app()->setLocale($this->lang);

用户单击另一个语言链接以更改网站语言,因此他被重定向到 HomeController 中的此功能,该功能扩展了 Controller

session()->forget('site_lang');
session(['site_lang' => $lang]);
//echo  session()->get('site_lang').'<br>'; //prints fr
$this->lang = $lang;
//echo $this->lang; //prints fr
app()->setLocale($lang);
//echo app()->getLocale(); //prints fr
return redirect("/");

删除了一些验证以使其简短

所以用户点击“French”并被重定向到“HomeController@change_lang”,这是前一个函数,所有 echo 语句都打印 fr 但是当用户被重定向到主页时,值得到此行再次分配给zh

if( !session()->has( 'site_lang' ) ) { session(['site_lang' => 'en']); }

为什么会发生这种情况以及如何解决?

【问题讨论】:

  • 如以下答案所述,您无权访问构造函数中的会话,因为请求尚未通过具有启动会话的中间件的中间件堆栈...也如所述在下面的评论中,您很可能不会在控制器的构造函数中执行此逻辑,在中间件中可能会更好

标签: session laravel-5.7


【解决方案1】:

除非遵循laravel - Can't get session in controller constructor 之类的变通方法,否则无法从构造函数访问 SESSION

【讨论】:

  • 构造函数并不意味着包含任何逻辑。
猜你喜欢
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 2018-02-04
  • 2019-02-26
  • 2023-03-21
  • 2016-02-09
相关资源
最近更新 更多