如何解决Laravel AppServiceProvider 启动方法不从数据库中读取最近的值
我的 AppServiceProvider 中有一个配置设置,它检测数据库中的应用程序语言并使用 select 属性填充视图,并且我的基本控制器中有一个构造函数控制器,它允许用户更改应用程序语言,它会影响数据库配置设置。
问题是每当用户更改语言时,都会成功更新配置设置表,但 AppServiceProvider 始终读取以前的值,用户必须再次更改语言才能看到对应用程序的影响。
AppServiceProvider 代码:
public function boot()
{
Paginator::useBootstrap();
if(class_exists('\App\Lib\Helpers') && method_exists(new \App\Lib\Helpers(),'bootProviders')){
\App\Lib\Helpers::bootProviders();
}
$select = new Select('language');
$select->setAttribute('class','form-control');
$select->setAttribute('id','language');
$options = include '../resources/lang/list.PHP';
$select->setValueOptions($options);
$lang = getSetting('config_language');
if(empty($lang)){
$lang = 'en';
}
$select->setValue($lang);
view()->share('select',$select );
}
BaseController 构造方法:
public function __construct(Request $request) {
$settingsTable = new SettingTable();
if(request()->isMethod('post')){
$language = $request->get('language');
if(!empty($language)){
$settingsTable->saveSetting('config_language',$language);
return redirect(selfURL());
}
}
}
仅供参考:我已经检查了数据库配置表,看它是否受到影响并且值是否已更改,但 AppServiceProvider 在从缓存中读取时以某种方式读取了先前的值。
保存设置方法:
public function saveSetting($key,$value){
$total= $this->tableGateway->update(['value'=>$value],['key'=>$key]);
return $total;
}
getSetting 方法:
function getSetting($key){
$setting = \App\Setting::where('key',trim($key))->first();
if($setting){
return $setting->value;
}
else{
return null;
}
}
更新:我认为 AppServiceProvider 由于其性质而在控制器调用之前加载,所以这就是它具有先前值的原因。但如何使这种方法奏效?
如有任何建议,我们将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。