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

时间:2017-02-10 09:13:27

标签: php laravel laravel-5 constants 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);

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

谢谢

11 个答案:

答案 0 :(得分:68)

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

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');

答案 1 :(得分:19)

我使用别名类常量:

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

namespace App;

class MyApp {
   const MYCONST = 'val';
}

然后将其添加到config/app.php

中的别名类中
'aliases' => [
  //...
  'MyApp' => App\MyApp::class,

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

MyApp::MYCONST

答案 2 :(得分:9)

您的问题是关于'最佳做法',您询问了'.env方法'。

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

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

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

答案 3 :(得分:8)

您可以在 root directory / config / paths.php

中创建一个名为 paths.php 的文件。

将此数据插入path.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

答案 4 :(得分:4)

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

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

例如:

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

您修改了composer.json

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

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

更新你的作曲家!

答案 5 :(得分:3)

我会亲自为此创建一个类。

<?php

namespace App\Transaction\Constants;

/**
 * Class TransactionTypeConstant.
 */
final class TransactionTypeConstant
{
    public const TYPE_CREDIT = 'CREDIT';
    public const TYPE_DEBIT = 'DEBIT';
}

并像这样使用它:

<?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
        }
    }
}

答案 6 :(得分:2)

另一种方式如下:

  1. 在app / config目录中创建constant.php文件
  2. 在composer.json文件中
  3. ,添加如下指令:

    "autoload": {
       "classmap": [
           "database/seeds",
           "database/factories"
       ],
       "psr-4": {
           "App\\": "app/"
       },
       "files": [
           "app/helpers.php",
           "app/config/constants.php"
       ]
    }
    

答案 7 :(得分:2)

您可以简单地执行以下操作:

  1. 将常量放入主数组上的“ config / app.php”中,例如:

    clickCount = 0;
    click() {
        this.clickCount++;
        setTimeout(() => {
            if (this.clickCount === 1) {
                 // single
            } else if (this.clickCount === 2) {
                // double
            }
            this.clickCount = 0;
        }, 250)
    }
    
  2. 在任何需要的地方使用它们:

    'CONSTANT_NAME' => 'CONSTANT_VALUE',
    

答案 8 :(得分:0)

您可以在路由中的web.php文件顶部定义常量,并且可以使用常量名称访问项目中任何位置的常量

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

答案 9 :(得分:0)

require app_path().'/constants.php';

define('ADMIN',  'administrator');

或-

您还可以移动更敏感的信息

return [
   'hash_salt' => env('HASH_SALT'),
 ];

并像以前一样使用它:

 echo Config::get('constants.hash_salt');

答案 10 :(得分:0)

我认为使用帮助程序文件定义常量的最佳方法。检查我的解决方案。

composer.json

中定义文件路径
   "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "autoload": {
        "files": [
            "app/helpers.php",
            "app/Helper/function.php"  // constant defined here
        ],

app / Helper / function.php

define("assetPath","UI/");
define("viewPath","UI/");

在项目中的任何地方使用此常量。我正在刀片文件中使用。

  <script src="{{asset(assetPath.'js/jquery.min.js')}}"></script>
  <script src="{{asset(assetPath.'js/popper.min.js')}}"></script>
  <script src="{{asset(assetPath.'js/bootstrap.min.js')}}"></script>

我的方法比这更好

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

这是另一个问题,您必须为此运行cache:clear或cache命令。但是我的方法不需要这样做