在laravel中添加常量的最佳做法是什么? (长名单)

问题描述 投票:28回答:7

我对laravel很新。我有一个基本问题,在laravel中添加常量的最佳方法是什么。我知道我们用来添加常量的.env方法。我还制作了一个常量文件,用于我的项目。例如:

define('OPTION_ATTACHMENT', 13);
define('OPTION_EMAIL', 14);
define('OPTION_MONETERY', 15);
define('OPTION_RATINGS', 16);
define('OPTION_TEXTAREA', 17);

等等。它可以达到100或更多记录。那么编写常量的最佳方法应该是什么。 .env方法。或者添加constant.php文件?

谢谢

php laravel laravel-5 constants laravel-5.3
7个回答
76
投票

对于应用程序中全局使用的大多数常量,将它们存储在配置文件中就足够了。它也很简单

config目录中创建一个新文件。我们称之为constants.php

在那里你必须返回一个配置值数组。

return [
    'options' => [
        'option_attachment' => '13',
        'option_email' => '14',
        'option_monetery' => '15',
        'option_ratings' => '16',
        'option_textarea' => '17',
    ]
];

您可以按如下方式访问它们

Config::get('constants.options');
// or if you want a specific one
Config::get('constants.options.option_attachment');

22
投票

我使用别名类常量:

首先,创建包含常量的类:App/MyApp.php例如

namespace App;

class MyApp {
   const MYCONST = 'val';
}

然后将其添加到config/app.php中的别名类中

'aliases' => [
  //...
  'MyApp' => App\MyApp::class,

最后在任何地方使用它们(控制器甚至刀片):

MyApp::MYCONST

10
投票

你的问题是关于'最佳实践',你问的是'.env方法'。

.env仅适用于因环境变化而发生变化的变量。不同环境的例子:测试,验收,生产。

因此.env包含数据库凭据,API密钥等。

.env应该(imho)永远不会包含在所有环境中相同的常量。只需使用建议的配置文件。


9
投票

您可以在根目录/ config / paths.php中创建名为paths.php的文件

将此数据插入paths.php

define('OPTION_ATTACHMENT', 13);
define('OPTION_EMAIL', 14);
define('OPTION_MONETERY', 15);
define('OPTION_RATINGS', 16);
define('OPTION_TEXTAREA', 17);

注意:确保运行命令:php artisan config:clear


7
投票

首先,在app目录中创建Constants文件夹。

然后你制作Constants.php。在此文件中定义常量

例如 :

define('ONE', '1');
define('TWO', '2');

你修改了composer.json

或者,您可以使用composer.json通过将以下代码添加到“autoload”部分来加载bootstrap / constants.php文件,如下所示:

"autoload": {
    "files": [
        "bootstrap/constants.php"
    ]
}

并更新你的作曲家!


5
投票

除了Arun Singh的回答,我建议你使用helpers

在你的helper.php内你可以定义

if ( ! function_exists('constants'))
{
    function constants($key)
    {
       return config('constants.' . $key);
    }
}

因此而不是

Config::get('constants.options');
Config::get('constants.options.option_attachment');

你可以打电话

constants('options');
constants('options.option_attachment');

2
投票

另一种方式如下:

  1. 在app / config目录中创建constant.php文件
  2. 在composer.json文件中,添加如下指令: "autoload": { "classmap": [ "database/seeds", "database/factories" ], "psr-4": { "App\\": "app/" }, "files": [ "app/helpers.php", "app/config/constants.php" ] }
© www.soinside.com 2019 - 2024. All rights reserved.