我希望在我的Laravel 5应用程序中有一个新的配置文件来存储我的所有常量。在浏览网络后,我发现建议的解决方案似乎是创建一个新的配置文件,返回一组键值对然后用那个。所以我创建了以下文件:
<?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
我是否必须做其他事情才能让它发挥作用?
答案 0 :(得分:23)
在Laravel 5中,为了避免这种头痛,您可以使用config
帮助函数来获取配置项,如下所示:
config('constants.ADMIN_EMAIL')
很好,很容易;)
答案 1 :(得分:12)
Config
类是全局命名空间中的别名。要从控制器内部(位于App\Http\Controllers
命名空间中)引用它,您必须在其前面加上反斜杠:
echo \Config::get('constants.ADMIN_EMAIL');
或者在控制器类上面添加use
语句:
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');
答案 2 :(得分:1)
我今天遇到了同样的问题,我找到了一个优雅的解决方案:
将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!
]);
}
原因在函数的评论中得到了很好的解释