【问题标题】:How to define constants that can be used across config files in Laravel 5?如何定义可以在 Laravel 5 中跨配置文件使用的常量?
【发布时间】:2019-11-03 20:55:38
【问题描述】:

当我检查了多个来源时,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 文件与这些常量聚集在一起,因为它并不是真正适合它的。

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

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

【问题讨论】:

  • 我想你可以使用include 吗?你可以控制它在你想使用它的地方。
  • 然后在 .env 文件中定义这样的常量
  • @lighter 似乎是唯一的方法。我从没想过我会在这方面使用香草 PHP,仍然希望有更多的 Laravel 方式:) 谢谢你
  • @ACD,我发布我的答案。如果您有任何想法,希望您能与我分享,谢谢。

标签: php laravel laravel-5 lumen


【解决方案1】:

最好的方法是将它们添加到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 添加值而烦恼,因为这些值大多包含非关键信息(即您的私钥等)

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

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

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

【讨论】:

  • 问题是,我有大量这些已定义的变量。像其中的 500 多个一样,我不想膨胀任何 laravel 的核心文件。我希望他们在其他地方与世隔绝。
  • 我会在我的答案中添加另一种可能满足您的要求的可能性。
  • 在后续操作中,您可以选择对常量进行分组,因为它们在 'user' => [...], 'admin' => [...], 'public' => [...], 等中太多了。访问值将是 config('constants.public.THE_ID_OF_SOMETHING_NICE');
【解决方案2】:

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

<?php

include 'something_constant.php';

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-19
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    相关资源
    最近更新 更多