如何访问 javascript 中的 laravel .env 变量?
How to access the laravel .env variables inside javascript?
我目前在 Laravel 应用程序中使用 Algolia 作为我的搜索引擎,因此每当创建记录时,它也会被发送到 Agolia 数据库。当然,我想将 Algolia 数据库中的数据与用于本地开发的测试集和用于实时网站的生产集分开。我已经在 JavaScript 文件中定义了我的 Algolia 数据库的哪些索引。
现在我想知道如何根据我当前的环境对我的 APP_ENV 变量做出相应的反应来改变它?显然我需要将内容放入我的 JavaScript 中的 if
语句中,但是如何使我的 javascript 正确访问 .env 变量?
希望有人能帮助我。
干杯。
有很多方法。
最好的方法之一是将数据从 Controller 传递到视图:
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 应用程序中执行此操作的好方法。
您可以在视图中将 env 变量作为 javascript 字符串输出:
<script>
var name = '{{ env('NAME') }}';
alert(name);
</script>
您的 .env 文件将如下所示:
姓名=亚历克斯
更简洁的解决方案是使用 laracasts/utilities
包将您的变量发送到您的文件。
使用 composer require laracasts/utilities
命令安装它。
然后在控制器顶部添加 use JavaScript;
。
最后以这种方式发送您的变量:JavaScript::put([ 'foo' => $bar ]);
。
As the documentation suggests:您可以使用 env
变量,方法是在您的 .env
文件中使用 MIX_
.
作为前缀
例如:MIX_SENTRY_DSN_PUBLIC=http://example.com
在 .env
文件中定义变量后,您可以使用 process.env
对象从 javascript 文件访问它。
例如:process.env.MIX_SENTRY_DSN_PUBLIC
如果从主 js 文件外部访问环境变量。您可以执行以下操作:
let mix = require('laravel-mix');
require('dotenv').config();
然后:
let my_env_var = process.env.MY_ENV_VAR;
需要 mix 和 dotenv 配置才能访问。 :)
首先,确保您可以访问 PHP 文件或 blade 文件中的 env 文件,您可以查看此答案 https://whosebug.com/a/60790227/13012364
然后,如果您的 javascript 文件与您的 blade 文件分开,您可以使用 window object 来放置您的环境值,例如
window.APP_URL = `{{ config('app.APP_URL') }}`;
之后,您可以使用 window object
在 javascript 文件中访问该环境值
const app_url = window.APP_URL;
我目前在 Laravel 应用程序中使用 Algolia 作为我的搜索引擎,因此每当创建记录时,它也会被发送到 Agolia 数据库。当然,我想将 Algolia 数据库中的数据与用于本地开发的测试集和用于实时网站的生产集分开。我已经在 JavaScript 文件中定义了我的 Algolia 数据库的哪些索引。
现在我想知道如何根据我当前的环境对我的 APP_ENV 变量做出相应的反应来改变它?显然我需要将内容放入我的 JavaScript 中的 if
语句中,但是如何使我的 javascript 正确访问 .env 变量?
希望有人能帮助我。
干杯。
有很多方法。
最好的方法之一是将数据从 Controller 传递到视图:
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 应用程序中执行此操作的好方法。
您可以在视图中将 env 变量作为 javascript 字符串输出:
<script>
var name = '{{ env('NAME') }}';
alert(name);
</script>
您的 .env 文件将如下所示:
姓名=亚历克斯
更简洁的解决方案是使用 laracasts/utilities
包将您的变量发送到您的文件。
使用 composer require laracasts/utilities
命令安装它。
然后在控制器顶部添加 use JavaScript;
。
最后以这种方式发送您的变量:JavaScript::put([ 'foo' => $bar ]);
。
As the documentation suggests:您可以使用 env
变量,方法是在您的 .env
文件中使用 MIX_
.
例如:MIX_SENTRY_DSN_PUBLIC=http://example.com
在 .env
文件中定义变量后,您可以使用 process.env
对象从 javascript 文件访问它。
例如:process.env.MIX_SENTRY_DSN_PUBLIC
如果从主 js 文件外部访问环境变量。您可以执行以下操作:
let mix = require('laravel-mix');
require('dotenv').config();
然后:
let my_env_var = process.env.MY_ENV_VAR;
需要 mix 和 dotenv 配置才能访问。 :)
首先,确保您可以访问 PHP 文件或 blade 文件中的 env 文件,您可以查看此答案 https://whosebug.com/a/60790227/13012364
然后,如果您的 javascript 文件与您的 blade 文件分开,您可以使用 window object 来放置您的环境值,例如
window.APP_URL = `{{ config('app.APP_URL') }}`;
之后,您可以使用 window object
在 javascript 文件中访问该环境值const app_url = window.APP_URL;