web-dev-qa-db-ja.com

JavaScript内でlaravel .env変数にアクセスする方法は?

現在、Laravelアプリケーション内の検索エンジンにAlgoliaを使用しているため、レコードが作成されると、Agoliaデータベースにも送信されます。もちろん、Algoliaデータベースでデータを分離したいローカル開発用のテストセットとライブWebサイト用のプロダクションセットを使用して、JavaScriptデータベースで使用されているAlgoliaデータベースのインデックスを定義しました。

現在のAPP_ENV変数に応じて、現在の環境に応じて変数を変更するにはどうすればよいのでしょうか。明らかに、JavaScriptのifステートメントにデータを入れる必要がありますが、JavaScriptで.env変数に適切にアクセスするにはどうすればよいですか?

うまくいけば、誰かが私を助けることができます。

乾杯。

18
Stephan-v

あなたはあなたのビューでjavascript文字列としてenv変数をエコーすることができます:

<script>

var name = '{{ env('NAME') }}';

alert(name);

</script>

そして、あなたの.envファイルは次のようになります:

NAME = Alex

32
Agu Dondo

ドキュメントが示唆しているように :.envファイルのキーの前にMIX_を付けることで、env変数を簡単に使用できるようになりました。

MIX_SENTRY_DSN_PUBLIC=http://example.com

変数が.envファイルで定義されたら、process.envオブジェクトを介してアクセスできます。

process.env.MIX_SENTRY_DSN_PUBLIC

13
TimothePearce

メインのjsファイルの外部から環境変数にアクセスする場合。次のことができます。

let mix = require('laravel-mix');
require('dotenv').config();

次に:

let my_env_var = process.env.MY_ENV_VAR;

ミックスとdotenv設定が必要な場合はアクセスできます。 :)

3
simonw16

方法はたくさんあります。

最善の方法の1つは、コントローラーからビューにデータを渡すことです。

if ($app->environment('local'))
{
    // Here you can generate some <script></script> code or you could just generate
    // hidden div like <div id="environment" style="display:none">local</div>

}

またはこのように:

return view('myView')->with('env', $app->environment());

または、セッションを使用することもできます。

\Session::put('env', $app->environment())

もちろん、専用のルートを作成してAjaxで取得することはできますが、実際のWebアプリケーションでこれを行うのは良い方法ではないと思います。

2
Alexey Mezenin

より明確な解決策は、_laracasts/utilities_パッケージを使用して変数をファイルに送信することです。

_composer require laracasts/utilities_コマンドを使用してインストールします。

次に、コントローラーの上部に_use JavaScript;_を追加します。

そして最後に、この方法で変数を送信します:JavaScript::put([ 'foo' => $bar ]);

1
TimothePearce