如何在 Laravel 5 中定义可跨配置文件使用的常量?

How to define constants that can be used across config files in Laravel 5?

当我检查多个来源时,Laravel 定义常量变量的方法是通过配置文件。但是,就我而言,我想在我的配置文件中使用常量,这是不可能的,因为据我所知,从另一个调用配置不是 possible/advisable。

例子

常数:

define('THE_ID_OF_SOMETHING_NICE', 1);
define('THE_ID_OF_SOMETHING_UGLY', 2);
define('THE_ID_OF_SOMETHING_BAD', 12372);

config1.php

return [
   THE_ID_OF_SOMETHING_NICE = ['many', 'nice', 'data'],
]

config2.php

return [
   ['many', 'nice', 'data', THE_ID_OF_SOMETHING_NICE],
]

如您所见,我不能使用已定义常量的实际值,因为它太难读了。此外,我不想将我的 .env 文件与这些常量混为一谈,因为它并不是真正适合它的。

有什么解决方法吗?谢谢

P.S 为什么这这么难,而使用常量定义应该是 PHP 的非常基本的原则。 CI 弄清楚了:/

最好的方法是将它们添加到 config/app.php 文件中。您可以在 providers[] 列表上方的某处添加

'CONST' => ['THE_ID_OF_SOMETHING_NICE' => 1,
            'THE_ID_OF_SOMETHING_UGLY' => 2, 
           ],
代码中的

anywhere 使用 laravel 助手 config('app.CONST.THE_ID_OF_SOMETHING_NICE');

访问值

您可以使用 .env 文件,但请注意,在生产中,该文件会被忽略,因为配置会自动缓存。在 .env 中,您可以添加 THE_ID_OF_SOMETHING_NICE=1 行,并在 config/app.php 文件中添加

'CONST' => ['THE_ID_OF_SOMETHING_NICE' => env('THE_ID_OF_SOMETHING_NICE'),],

从那里您可以访问与 config() 助手相同的值。

就我个人而言,我在 app.php 文件中添加了值,并且不费心向 .env 添加值,因为大多数这些包含 non-critical 信息(即您的私钥等)

如果您想创建一个单独的文件以与其他配置文件隔离,您可以创建一个文件 f.ex。 config/constants.php 和 return 一个数组,就像在其他配置文件中所做的那样。使它成为平面数组(没有 'CONST' 键)。在app/providers/AppServiceProviderregister()方法中添加

$this->mergeConfigFrom('config/constants.php', 'constants');

这样您就可以使用 config('constants.THE_ID_OF_SOMETHING_NICE');

访问常量

如果您不想在 .env 文件中添加很多内容,我想您可以在 config.php 上使用 php include。就这样

<?php

include 'something_constant.php';

return [
   THE_ID_OF_SOMETHING_NICE = ['many', 'nice', 'data'],
];