Laravel 5环境配置数组?

Jak*_*son 8 php laravel

在Laravel 4中,您可以设置基于环境的配置文件夹结构:

/config/app.php
/config/dev/app.php
/config/staging/app.php
/config/testing/app.php
Run Code Online (Sandbox Code Playgroud)

你能用Laravel 5做到这一点吗?我理解这个.env概念,我正在用它来定义我所处的环境.但是我需要定义一个配置值,它是一个任意长度的数组,你不能用.env文件来做.

我正在努力实现的一个例子:

if (in_array($request->input('value'), config('app.valid_values')) {
  // do something
}
Run Code Online (Sandbox Code Playgroud)

valid_values只是一个值数组.它是任意长度的,所以你不能只在你的.env文件中设置它们,如:

VALID_VALUE1=...
VALID_VALUE2=...
etc.
Run Code Online (Sandbox Code Playgroud)

并且每个环境的数组需要不同.

使用环境配置文件夹在Laravel 4中很容易做到这一点.但是你如何用Laravel 5做到这一点?

San*_*r82 17

如果需要在值上创建数组,可以使用字符串格式创建,并在需要时可以解析它们

MY_ARRAY_VALUE=1,2,house,cat,34234
Run Code Online (Sandbox Code Playgroud)

当你需要它们时

$myArrayValue  = explode(',', env('MY_ARRAY_VALUE'));
Run Code Online (Sandbox Code Playgroud)

或者将您的值保存在JSON中并使用它们 json_decode()

$myArrayValue  = json_decode(env('MY_ARRAY_VALUE'), true);
Run Code Online (Sandbox Code Playgroud)

额外信息:

在Laravel 5上,您需要将所有配置文件翻译成一个.env文件.

在每个环境中,您的.env文件将与此环境的值不同.

要设置你的环境,你需要改变的价值APP_ENV在你的.env文件

APP_ENV=local
Run Code Online (Sandbox Code Playgroud)

您可以在该文件中创建自己的变量

https://laravel.com/docs/5.2/configuration#environment-configuration

这是Laravel 5.0升级指南的摘录 https://laravel.com/docs/5.2/releases#laravel-5.0

Laravel 5现在使用Vance Lucas的DotEnv,而不是各种令人困惑的嵌套环境配置目录.该库提供了一种管理环境配置的超级简单方法,并使Laravel 5中的环境检测变得轻而易举.有关更多详细信息,请查看完整的配置文档.

您可以.env在此处找到默认文件:https://github.com/laravel/laravel/blob/master/.env.example

根据运行应用程序的环境提供不同的配置值通常很有帮助.例如,您可能希望在本地使用不同的缓存驱动程序,而不是在生产服务器上使用.使用基于环境的配置很容易.

为了使这个变得简单,Laravel使用了Vance Lucas的DotEnv PHP库.在新的Laravel安装中,应用程序的根目录将包含.env.example文件.如果您通过Composer安装Laravel,此文件将自动重命名为.env.否则,您应该手动重命名该文件.


jes*_*ssn 9

一般用于 Phpdotenv

Phpdotenv 用于在环境中存储值,而不是通用配置库。环境是 UNIX 概念,值始终被解释为字符串。即使转换为不同的数据类型(例如数组或布尔值)很方便,也会超出此类的范围。

Laravel 配置系统

Laravel 的配置系统已经是分离的。phpdotenv 负责环境,laravel 负责配置。一旦配置完成,环境将被忽略。将环境变量从字符串解析为传递给 Laravel 的内容(天气是它们的 env 函数,或者在配置文件中爆炸)的问题。

好的做法

换句话说,使用 Config::get() 获取具有所需结构的特定 conf 文件,您就拥有了所需的内容。

根据 Laravel 指南,当 env() 位于 config 文件夹之外时,您不应该直接在代码中使用 env() 。使用 config() 是一个很好的做法。在配置文件中使用 env() 从 .env 文件获取数据。

  • 除此之外,您应该只在配置文件中使用“env()”的原因是,一旦您将应用程序投入生产,您就会运行“php artisan config:cache”,并将所有配置文件解析为仅缓存的文本解决所有对文本的“env()”调用的版本。`env()` 函数在生产环境中不可用,应该(主要)仅用于设置您的配置。 (2认同)