在 Laravel 5 中添加新的配置文件不起作用

Adding a new config file in Laravel 5 not working

我想在我的 Laravel 5 应用程序中创建一个新的配置文件来存储我所有的常量。在网上查看后,我发现推荐的解决方案似乎是创建一个新的配置文件 returns 一组键值对,然后使用它。所以我创建了以下文件:

<?php
// config/constants.php

return [
    'SITE_NAME' => 'Site Name',
    'SITE_EMAIL' => 'email@site.com',
    'ADMIN_EMAIL' => 'admin@site.com'
];

然后在我的一个控制器中,我尝试访问这些值之一,如下所示:

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

我刚收到以下错误:

FatalErrorException in WelcomeController.php line 46:
Class 'App\Http\Controllers\Config' not found

我是否必须执行其他操作才能使其正常工作?

Config class 是全局命名空间中的别名。要从控制器内部(在 App\Http\Controllers 命名空间中)引用它,您必须在它前面加上反斜杠:

echo \Config::get('constants.ADMIN_EMAIL');

或者在controller上面添加use语句class:

use Config;

class MyController extends Controller {

作为替代方案,您可能还想使用 dependency injection 来访问配置。这看起来有点像这样:

class MyController extends Controller {
    public function __construct(Illuminate\Config\Repository $config){
        $this->config = $config;
    }

    public function index(){
        echo $this->config->get('constants.ADMIN_EMAIL');
    }
}

正如@Bernig 所建议的,您也可以简单地使用新的 config() 辅助函数:

echo config('constants.ADMIN_EMAIL');

在Laravel 5中,为了避免这种头痛,你可以使用config辅助函数来获取一个配置项,像这样:

config('constants.ADMIN_EMAIL')

简单易用 ;)

我今天遇到了同样的问题,我找到了一个优雅的解决方案: 将 config/your_new_config.php 添加到 ConfigServiceProvider,如下所示:

/**
 * Overwrite any vendor / package configuration.
 *
 * This service provider is intended to provide a convenient location for you
 * to overwrite any "vendor" or package configuration that you may want to
 * modify before the application handles the incoming request / command.
 *
 * @return void
 */
public function register()
{
    config([
        'config/your_new_config.php', // add your new config file here!
    ]);
}

原因在函数的注释中有很好的解释