session - Laravel 会话不会改变
问题描述
我正在尝试使用“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,但是当用户被重定向到主页时,该值再次被该行分配给en
if( !session()->has( 'site_lang' ) ) { session(['site_lang' => 'en']); }
为什么会发生这种情况以及如何解决?
解决方案
除非遵循 laravel 之类的解决方法,否则无法从构造函数访问 SESSION - 无法在控制器构造函数中获取会话
推荐阅读
- c++ - c++ 异步键盘输入(标准方式)
- avro - Avro Schema Evolution with Enum – 反序列化崩溃
- go - 将嵌入结构复制到新结构中,而无需复制其所有字段
- python - Flask JSON 不工作:BadRequestKeyError:400 错误请求:浏览器(或代理)发送了此服务器无法理解的请求
- python - 通过 python 进行 SQL 查询:在 SQL 语法中
- string - 将变量字符串值分配给表名
- javascript - 重绘网格的二级激活问题(游戏逻辑)
- sharepoint - Sharepoint:使用图形 API 在特定驱动器中创建新文件
- java - MapStruct @Mapping(表达式="java(...)")
- flutter - 在 Flutter 上模拟 getExternalStorageDirectory