如何在 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/AppServiceProvider
的register()
方法中添加
$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'],
];
当我检查多个来源时,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/AppServiceProvider
的register()
方法中添加
$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'],
];