首页 > 解决方案 > 如何定义可以在 Laravel 5 中跨配置文件使用的常量?

问题描述

当我检查多个来源时,Laravel 定义常量变量的方式是通过配置文件。但是,在我的情况下,我想在我的配置文件中使用常量,这是不可能的,因为正如我所读到的,不可能/不建议从另一个调用配置。

例子

常数:

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 文件与这些常量聚集在一起,因为它并不是真的适合它。

有什么解决方法吗?谢谢。

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

标签: phplaravellaravel-5lumen

解决方案


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

'CONST' => ['THE_ID_OF_SOMETHING_NICE' => 1,
            'THE_ID_OF_SOMETHING_UGLY' => 2, 
           ],

代码中的任何地方都可以使用 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,因为大多数这些包含非关键信息(即您的私钥等)

如果您想创建一个单独的文件以与其他配置文件隔离,您可以创建一个文件 f.ex。config/constants.php并返回一个数组,因为它在其他配置文件中完成。使其成为平面阵列(无'CONST'键)。在方法app/providers/AppServiceProviderregister()添加

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

这样你就可以访问你的常量config('constants.THE_ID_OF_SOMETHING_NICE');


推荐阅读