Laravel 5环境配置数组?

19

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

/config/app.php
/config/dev/app.php
/config/staging/app.php
/config/testing/app.php

你能在Laravel 5中做到这一点吗?我了解.env的概念,我正在使用它来定义我所在的环境。但是我需要定义一个任意长度的数组作为配置值,而你无法通过.env文件完成这个任务。

我尝试实现的示例:

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

这个valid_values只是一个值的数组。它的长度是任意的,所以你不能像在.env文件里设置它们那样简单地设置它们:

VALID_VALUE1=...
VALID_VALUE2=...
etc.

而且需要为每个环境更改数组内容。

使用Laravel 4的环境配置文件很容易做到。但是在Laravel 5中该怎么做呢?


1
未来从Laravel 4升级到Laravel 5的读者可能会对Laravel Shift感兴趣。这是一个自动化升级过程并根据您的特定项目提供定制反馈的服务。免责声明:我创建了Shift - Jason McCreary
3个回答

52
如果您需要创建值数组,可以创建字符串格式,需要时再进行解析。
MY_ARRAY_VALUE=1,2,house,cat,34234

当你需要它们时

$myArrayValue  = explode(',', env('MY_ARRAY_VALUE'));

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

$myArrayValue  = json_decode(env('MY_ARRAY_VALUE'), true);

额外信息:

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

在每个环境中,您的 .env 文件将具有不同的值。

要设置您的环境,请更改您的 .env 文件中的 APP_ENV 值。

APP_ENV=local

你可以在这个文件中创建自己的变量。

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。否则,您应手动重命名该文件。


9

关于Phpdotenv的一般情况

Phpdotenv是用于存储环境变量的库,而不是通用的配置库。环境变量是UNIX概念,其值始终被解释为字符字符串。将其转换为不同的数据类型,例如数组或布尔值虽然方便但超出了此类的范围。

Laravel配置系统

Laravel的配置系统已经被分开了。Phpdotenv处理环境变量,Laravel负责配置文件。完成配置后,环境变量就被忽略了。解析环境变量从字符串转换为传递给Laravel的任何内容(无论是他们的env函数还是在您的配置文件中展开)是关注的重点。

良好的实践

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

根据Laravel指南,在配置文件之外的代码中永远不应直接使用env()。使用config()是一个好习惯。在配置文件中使用env()从.env文件获取数据。


2
此外,你应该只在配置文件中使用 env() 的原因是一旦你将你的应用程序投入生产环境,你会运行 php artisan config:cache 命令,这将把所有的配置文件解析为缓存的文本版本,从而将所有的 env() 调用解析为文本。env() 函数在生产环境中不可用,主要用于设置配置。 - Abraham Brookes

0
array_map('trim', array_filter(explode(',', env('ARRAY_VALUE'))))

这将修剪并且在环境为空字符串或有额外逗号时防止结果数组中有空项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接