在我的项目中,有时区(PT,CST等)的下拉列表,当管理员从下拉列表中更改时区时,管理面板会从所选下拉列表中反映时区。
如何根据所选选项更改配置/应用程序.php"时区"(应用程序时区)。
你还需要调用date_default_timezone_set
config(['app.timezone' => $timezone]);
date_default_timezone_set($timezone);
您可以使用Laravel辅助函数config
来设置时区。但是,这只会影响您将收到的请求。
config(['app.timezone' => $timezone]);
如果您的目标是更改一次时区并在每个请求上运行,那么将更改的时区保存在数据库或文件中怎么样?然后,编写数据库查询或读取 app/config 中的文件.php并更改文件中索引时区的值。
例如(文件示例):
当您更改时区时,它会保存在文件中。
file_put_contents("path/to/file", $timezone);
而且,在app/config.php
$timezone= file_get_contents("path/to/file");
return [
. . .
'timezone' => $timezone,
. . .
]
如果你想为所有未来的请求保留一个新的时区,你需要使用像larapack/config-writer这样的包,以便能够将时区保存到app
配置文件中。
处理此问题的另一种方法是将时区保留在数据库中,在每个请求中获取时区并使用config(['app.timezone' => $timezone])
动态设置时区。
您可以使用middleware
来实现此目的,无论您编写哪种途径,都会提及所有使用该中间件应用的途径。
您可以从数据库中获取该数据并按如下所示应用它,
config('app.timezone', 'your selected timezone')
您可以使用服务提供商。 这样,您首先需要从数据库中获取设置信息,然后更改配置文件中的设置。
Config::set('app.timezone', $db['timezone'] ?? config('app.timezone'));
In AppServiceProvider boot()
$settings = Settings::first();
date_default_timezone_set($settings->timezone ? $settings->timezone : config('app.timezone'));
这将覆盖应用中的默认 TZ 值.php