【问题标题】:laravel 5: Where define global Vars?laravel 5:在哪里定义全局变量?
【发布时间】:2015-04-08 14:48:26
【问题描述】:

在旧的 laravel 4 代码中,我们使用 constants.php 来定义全局变量。

在 Laravel 5 中使用定义变量的最佳实践是什么?

我们不会将它存储在 .env 文件或 routes.php 中

【问题讨论】:

  • "variables" - "constants" 这些名字对你没有任何影响?你不应该以任何方式使用全局变量。对于应用程序“常量”,您应该使用Config。对于类常量,您应该使用类常量。
  • @SergiuParaschiv 你说“你不应该以任何方式使用全局变量”,然后你说“你应该使用 Config”。请解释这两者有何不同??
  • Config 用于常量,而不是变量。全局变量,无论是变量还是小心用作常量都是不好的。全局变量只是不好的做法。正如我所说,对于常量有更好的方法 - Config.
  • 我的意思是,包裹在一个名为Config 的类中的东西怎么突然变得不那么全球化了?相同的问题不同的名字...
  • @PeeHaa 不同,因为您不将它用于全局变量。全局变量不好,因为从长远来看,当您不知道是谁或什么在改变它们时,维护健全的应用程序逻辑变得更加困难。另一方面,全局 constants 更易于管理,因为您无法更改它们,因此不必遵循业务逻辑来找出谁或什么在更改它们。 Config 相对于普通全局变量(我们在这里只讨论常量)的优势在于,您可以使用内置的依赖注入器以一种可接受的方式管理依赖关系。

标签: php constants laravel-5


【解决方案1】:

我只是想改进一点@Adam 的回答。假设有一个在线购物车。然后,您需要一个全局变量来存储 currency symbol 以便在视图中显示。由于此值可以随时间更改,因此您可以在 App\Providers\ConfigServiceProvider 处指定它,如下所示:

public function register()
{
    $currency = 'whatever you want';

    config([
        'currency' => $currency
    ]);
}

$currency = config('currency') var 是全局变量,可在整个应用程序中使用,即使请求尚未到达控制器(您可以阅读有关 middleware classes 的更多信息)。

如果您确实想使用常量(值永远不会改变),您可以考虑在配置文件中直接设置值,如下所示:

# create a new config file config/customs.php 

# like content, you could start with:
return  [
    'currency' => '$'
];

最后,您使用config('customs.currency') 把握应用中的价值。

【讨论】:

    【解决方案2】:

    取决于您尝试存储的变量类型。如果它们与模型相关,则应将它们存储在模型中,如果它们与环境相关,则应将它们存储在 .env 中。您要存储什么样的变量?

    【讨论】:

    • 我们在 config/ 文件夹中有一个文件需要这个全局变量,如果我们将它存储到相关模型中,我们会得到一个致命错误,因为 \Eloquent 不可用。我认为这被概念打破了。
    • 你想存储什么样的变量?
    • 例如:define('COUNTRY_ID_AU' , 36);
    • 您可以创建一个名为 countries 的配置文件,其中包含一个以 country 短代码为键、以 id 为值的数组?
    猜你喜欢
    • 2023-03-02
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多