【问题标题】:Centralizing constants on a Laravel project [closed]在 Laravel 项目中集中常量 [关闭]
【发布时间】:2018-12-18 15:45:15
【问题描述】:

在一个项目中,我经常需要处理常量,我从不支持像硬编码那样对它们进行硬编码

if (status === 2) { // do something }    

因此,我需要集中这些常量,以便我可以给它们一个可读的名称,例如 STATUS_SUCCESS,并在整个项目中使用该常量。

我的第一个问题是,在 laravel 项目中制作、放置和使用它们的最佳方法是什么?

我看到人们在应用程序内创建一个 Enums 文件夹并在其中制作相关界面。

interface Ticket {
  const STATUS_OPEN = 1;
}

//Use like
if (status === Ticket::STATUS_OPEN) {// do something}

第二个问题是,这种枚举方法的有效性和相关性如何?为什么? 谢谢。

【问题讨论】:

  • 如果它们对不同的模型有不同的含义,则不应共享它们。在您的用户状态和票证状态示例中,1 可以表示 inactiveopen - 除非您将其称为 STATUS_INACTIVE_OR_OPEN_OR_MAYBE_SOME_OTHER_THING,否则对两者使用相同的常量是没有意义的。跨度>
  • 这取决于变量的类型,如果它们是静态的,那么你可以使用配置来管理,如果你想在视图之间共享变量,你可以使用视图编辑器。
  • @ceejayoz 他们在任何地方的意思都是一样的。抱歉,我错误地将两个不同的号码用于同一件事。现已编辑。

标签: php laravel interface constants


【解决方案1】:

我建议你应该在config 文件夹中创建一个名为 constants.php 的文件,并在那里定义你的常量,并使用 config 在整个应用程序中使用它们。该文件的内容将是

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

为简单起见,不要制作嵌套的常量数组。

那我觉得最好的办法就是用常量创建一个类

class Constant
{
    const DRAFT = 1;
    const PUBLISHED = 2;
    const DELETED = 3;
}

你会使用:

echo Constant::DRAFT;

【讨论】:

  • 我不喜欢 config 的原因是,它使语句冗长且不干净。比如,config::get('options.option_email') // 这么久
猜你喜欢
  • 1970-01-01
  • 2021-10-18
  • 2014-03-07
  • 2021-09-18
  • 1970-01-01
  • 2013-11-17
  • 1970-01-01
  • 2011-10-05
  • 2017-07-12
相关资源
最近更新 更多