【问题标题】:Laravel 5 environment config arrays?Laravel 5 环境配置数组?
【发布时间】:2016-10-22 06:29:26
【问题描述】:

在 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 做到这一点呢?

【问题讨论】:

  • 未来从 Laravel 4 升级到 Laravel 5 的读者可能会对 Laravel Shift 感兴趣。这是一项服务,可自动升级过程并根据您的特定项目提供自定义反馈。 免责声明:我创建了 Shift

标签: php laravel


【解决方案1】:

一般用于 Phpdotenv

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

Laravel 配置系统

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

良好做法

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

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

【讨论】:

  • 除此之外,原因你应该只在配置文件中使用env(),因为一旦你将你的应用程序投入生产,你就会运行php artisan config:cache,这解决了所有配置文件到一个缓存的纯文本版本,它可以解析你所有的 env() 对文本的调用。 env() 函数在生产环境中不可用,应该(主要)仅用于设置您的配置。
【解决方案2】:

如果你需要在值上创建一个数组,你可以创建一个字符串格式,当你需要的时候你可以解析它们

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

【讨论】:

    猜你喜欢
    • 2015-06-13
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2015-01-01
    • 1970-01-01
    • 2015-02-10
    相关资源
    最近更新 更多