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

Far*_*han 39 php constants laravel laravel-5 laravel-5.3

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

define('OPTION_ATTACHMENT', 13);
define('OPTION_EMAIL', 14);
define('OPTION_MONETERY', 15);
define('OPTION_RATINGS', 16);
define('OPTION_TEXTAREA', 17);
Run Code Online (Sandbox Code Playgroud)

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

谢谢

K A*_*ngh 84

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

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

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

return [
    'options' => [
        'option_attachment' => '13',
        'option_email' => '14',
        'option_monetery' => '15',
        'option_ratings' => '16',
        'option_textarea' => '17',
    ]
];
Run Code Online (Sandbox Code Playgroud)

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

Config::get('constants.options');
// or if you want a specific one
Config::get('constants.options.option_attachment');
Run Code Online (Sandbox Code Playgroud)

  • 记得在添加constants.php文件后运行`php artisan config:cache` (4认同)
  • `在数学中,形容词常数意味着不变`这意味着这不是“正确答案” (3认同)
  • 也可以使用 `config` 帮助器 `config('constants.options');` 来调用它 (3认同)
  • @KArunSingh为什么你只是指向重复/sf/ask/1879782131/. (2认同)
  • 另外我认为它应该是`\ Config :: get('constants.options');`或`\ Config :: get('constants.options.option_attachment');`with backslash (2认同)

Nee*_*bus 27

我使用别名类常量:

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

namespace App;

class MyApp {
   const MYCONST = 'val';
}
Run Code Online (Sandbox Code Playgroud)

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

'aliases' => [
  //...
  'MyApp' => App\MyApp::class,
Run Code Online (Sandbox Code Playgroud)

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

MyApp::MYCONST
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这种方法。这将帮助其他开发人员轻松跟踪常量的来源,而不是向您的自动加载声明它。使用这种方法有什么缺点吗? (2认同)
  • 这是比“接受的答案”更好、更快的选择,谢谢! (2认同)

小智 14

我会亲自为此创建一个课程。

<?php

namespace App\Transaction\Constants;

/**
 * Class TransactionTypeConstant.
 */
final class TransactionTypeConstant
{
    public const TYPE_CREDIT = 'CREDIT';
    public const TYPE_DEBIT = 'DEBIT';
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

<?php

namespace App\Transaction;

use App\Transaction\Constants\TransactionTypeConstant;

class Transaction
{
    /**
     * Execute the task.
     *
     * @return object
     */
    public function run()
    {
        if ($transaction->type === TransactionTypeConstant::TYPE_DEBIT) {
            //do something
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 12

另一种方式如下:

  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"
       ]
    }
    
    Run Code Online (Sandbox Code Playgroud)


小智 11

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

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

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

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


Dev*_*lon 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);
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么是“paths.php”?看起来很随机。 (9认同)

New*_*_TT 7

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

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

例如 :

define('ONE', '1');
define('TWO', '2');
Run Code Online (Sandbox Code Playgroud)

然后您修改 composer.json

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

"autoload": {
    "files": [
        "bootstrap/constants.php"
    ]
}
Run Code Online (Sandbox Code Playgroud)

并更新您的作曲家!


Ada*_*dam 5

除了阿伦·辛格(Arun Singh)的答案外,我建议您使用帮助器

在您的内部,您helper.php可以定义

if ( ! function_exists('constants'))
{
    function constants($key)
    {
       return config('constants.' . $key);
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,代替

Config::get('constants.options');
Config::get('constants.options.option_attachment');
Run Code Online (Sandbox Code Playgroud)

你可以打电话

constants('options');
constants('options.option_attachment');
Run Code Online (Sandbox Code Playgroud)