ChatGPT解决这个技术问题 Extra ChatGPT

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

我对 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 文件?

谢谢

你可以选择很多地方:1)一个普通的(我的)SQL数据库2)一个键值故事/nosql数据库,比如redis 3)配置文件夹,使用你自己的配置文件,可能还有更多。最佳实践可能是选项 3,也是最快的
也许这个答案对您有用:stackoverflow.com/a/26062788/6028607
@VincentG 就像我上面解释的那样。我不认为 .env 是最好的选择。我有一长串常量。
您接受的答案与您的问题或示例不符。常量不是会改变的配置变量。这正是它的标签方式,一个无论如何都不会改变的恒定值。 @Neekobus 给出的答案是常量的正确方法。您可能需要修改已接受的答案。

A
Adam

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

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

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

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

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

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

@KArunSingh 你为什么不只是指向重复 stackoverflow.com/questions/26854030/…
in mathematics, the adjective constant means non-varying 这意味着这不是“正确答案”
添加 constants.php 文件后记得运行 php artisan config:cache
我也认为它应该是带有反斜杠的 \Config::get('constants.options');\Config::get('constants.options.option_attachment');
也可以使用 config 助手 config('constants.options'); 调用它
N
Neekobus

我使用别名类常量:

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

namespace App;

class MyApp {
   const MYCONST = 'val';
}

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

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

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

MyApp::MYCONST

我喜欢这种方法。这将帮助其他开发人员轻松跟踪常量的来源,而不是将其声明为自动加载。使用这种方法有什么缺点吗?
对于常量,我看不到任何缺点。不适合配置(随环境变化)。使用 Config:get 代替。
这是比“接受的答案”更好更快的选择,谢谢!
也喜欢这种方法(只是提醒在更改后使用 composer dump-autoload
r
redcenter

您的问题是关于“最佳实践”,您询问了“.env 方法”。

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

所以 .env 包含数据库凭证、API 密钥等。

.env 应该(恕我直言)从不包含在所有环境中都相同的常量。只需使用建议的配置文件即可。


H
Hax0r

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

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

例如 :

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

然后您修改 composer.json

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

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

并更新您的作曲家!


如果按定义写('ONE')|| 会很好定义('一个','1');
D
Dev Semicolon

您可以在根目录/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


为什么是paths.php?看起来很随意。
A
Adam

我认为您不应该将所有常量放在一个位置。尤其是没有名为 constance.php 的文件。

我在类中使用 PHP constance 并在代码中引用它们,因此它更具可读性,通常是为了避免字符串中的幻数和拼写错误

Car::where('car_type','=', 'fast_car')->get();

而是有

Car::where('car_type','=', CarType::FAST)->get();

如果它的值取决于您的环境(如电子邮件设置,应该是不同的本地与生产),那么您应该将它添加到配置文件夹中的匹配文件(例如'/config/mail.php')。您也可以在 config 文件夹中添加一个新文件。配置文件返回一个数组,因此它可能如下所示:

<?php

return [
  'your_option' => env('YOUR_OPTION')
];

您可以使用配置助手阅读它:

config('your_config_file.your_option');

永远不要在配置文件之外调用 env 函数很重要,因为启用缓存时 env 函数在配置文件之外返回 null。

如果该选项不依赖于您的环境,您可以直接将其添加到匹配的配置文件中。

<?php

return [
  'your_option' => 10
];

A
Al Foиce ѫ

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

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

这种方法适用于所有人。但是在这种情况下,配置不可缓存。
我喜欢这个解决方案,因为它看起来很干净并且适用于所有场景。
对我来说这是最好的方法,简单而优雅,谢谢
K
Khaldoun Nd

另一种方式如下:

在 composer.json 文件的 app/config 目录中创建 constant.php 文件,添加如下指令: "autoload": { "classmap": [ "database/seeds", "database/factories" ], "psr-4 ": { "App\\": "app/" }, "文件": [ "app/helpers.php", "app/config/constants.php" ] }


N
Naeem Ijaz

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

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

B
Bioukh

你可以简单地这样做:

将你的常量放在主数组上的 'config/app.php' 中,例如:'CONSTANT_NAME' => 'CONSTANT_VALUE',在任何你想要的地方使用它们:{{ Config::get('CONSTANT_NAME') }}


Y
Yahya Ayyoub
require app_path().'/constants.php';

define('ADMIN',  'administrator');

或者 -

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

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

并像以前一样使用它:

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

p
pankaj kumar

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

在 composer.json 中定义文件路径

   "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "autoload": {
        "files": [
            "app/helpers.php",
            "app/Helper/function.php"  // constant defined here
        ],

应用程序/助手/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 命令。但我的方法不需要这个。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅