web-dev-qa-db-ja.com

laravelでTimeZoneを動的に変更します

私のプロジェクトでは、タイムゾーン(PT、CSTなど)のドロップダウンがあり、管理者がドロップダウンからタイムゾーンを変更すると、管理パネルは選択したドロップダウンからのタイムゾーンを反映します。
選択したオプションに従って、Config/app.phpの「timezone」(アプリケーションのタイムゾーン)を変更する方法。

11
SVM

Laravelヘルパー関数configを使用してタイムゾーンを設定できます。ただし、これは受信するリクエストにのみ影響します。

config(['app.timezone' => $timezone]);

タイムゾーンを一度変更してすべてのリクエストで実行することが目的の場合は、変更されたタイムゾーンをDBまたはファイルに保存することはどうでしょうか。次に、DBのクエリを書き込むか、app/config.phpのファイルを読み取り、ファイルのインデックスタイムゾーンの値を変更します。

例(ファイル例):

タイムゾーンを変更すると、ファイルに保存されます。

file_put_contents("path/to/file", $timezone);

そして、app/config.php

$timezone= file_get_contents("path/to/file");
return [
 . . .   
    'timezone' => $timezone,
 . . .
]
3
Phoenix404

date_default_timezone_set も呼び出す必要があります

    config(['app.timezone' => $timezone]);
    date_default_timezone_set($timezone);
3
the_hasanov

今後のすべてのリクエストで新しいタイムゾーンを保持したい場合は、タイムゾーンをapp configに保存できるように larapack/config-writer のようなパッケージを使用する必要がありますファイル。

これを処理する別の方法は、DBにタイムゾーンを保持し、すべてのリクエストでフェッチし、config(['app.timezone' => $timezone])で動的に設定することです。

2
Alexey Mezenin

middlewareを使用してこれを実現できますが、どのミドルウェアを適用するすべてのルートについて、どのルートで記述するかを記述できます。
データベースからそのデータをフェッチして、次のように適用できます。

config('app.timezone', 'your selected timezone')
2
Rahul Meshram