[ Lumen 5.2 文档 ] 起步 —— 配置

1、简介

Lumen框架的所有配置项都放在配置文件.env  中。

2、访问配置值

你可以使用全局的辅助函数config来访问配置值,配置值可以通过”.”来分隔配置文件和配置项,如果配置项不存在的话则会返回默认值:

$value = config('app.timezone');

如果要在运行时设置配置值,传递一个数组到config函数:

config(['app.timezone' => 'America/Chicago']);

3、环境配置

基于应用运行环境拥有不同配置值能够给我们开发带来极大的方便,比如,我们想在本地和线上环境配置不同的缓存驱动,在Lumen中这很容易实现。

Lumen使用了Vance Lucas开发的PHP库DotEnv来实现这一目的,在新安装的Lumen中,根目录下有一个.env.example文件,如果Lumen是通过Composer安装的,那么该文件已经被重命名为.env,否则的话你要自己手动重命名该文件。

在每次应用接受请求时,.env中列出的所有变量都会被载入到PHP超全局变量$_ENV中,然后你就可以在应用中通过辅助函数env来获取这些变量值:

$debug = env('APP_DEBUG', true);

第二个传递给env函数的值是默认值,如果给定key对应的环境变量不存在则使用该默认值。

不要把.env文件提交到源码控制(svn或git等)中,因为每个使用你的应用的不同开发者或服务器可能要求不同的环境配置。

如果你是在一个团队中进行开发,你可能需要将.env.example文件随你的应用一起提交到源码控制中,通过将一些配置值以占位符的方式放置在.env.example文件中,其他开发者可以很清楚明了的知道运行你的应用需要配置哪些环境变量。

判断当前应用环境

当前应用环境通过.env文件中的配置项来 APP_ENV决定,可以通过App实例上的environment方法来访问该配置值:

$environment = app()->environment();

你也可以向environment方法中传递参数来判断当前环境是否匹配给定值,如果需要的话你甚至可以传递多个值,如果匹配的话会返回true

if (App::environment('local')) {
    // The environment is local
}
if (App::environment('local', 'staging')) {
    // The environment is either local OR staging...
}

学院君 has written 960 articles

Laravel学院院长,终身学习者

积分:108942 等级:P12 职业:手艺人 城市:杭州

11 条回复

  1. 蚂蚁 蚂蚁 says:
    关于config('app.key') 之类的如果用不了 请打开bootstrap/app.php 里面的 $app->withFacades();
  2. 毛金龙 毛金龙 says:
    @ consatan 我也遇见这个问题了?你是怎么解决的?
  3. Fivezh Fivezh says:
    bootstrap/app.php中需增加:$app->configure('app');程序文件中通过config('app.cipher')获取配置项
  4. 懒人 懒人 says:
    @ 陶小胖 解决方法 //在 根目录 创建 config/statuses.php 文件 //在 bootstrap/app.php 中 加载文件,即可以使用了 $app->configure('statuses'); //使用 $statuses= config('statuses'); print_r($statuses);
  5. 懒人 懒人 says:
    @ dvwxt config(),无法获取根目录config/下的配置文件呢,奇怪了。
  6. sunshine sunshine says:
    能不能像laravel那样把config文件夹复制到根目录 直接调用config里面的 如果很多配置的话 每个都在bootstrap/app.php 里面设置的话 感觉很麻烦 有没有什么简单的方法
  7. sunshine sunshine says:
    @ 鸡仔食饭米 这样是可以 但是 不能像之前那样 直接从Config里面获取么
  8. 学院君 学院君 says:
    @ 秀才 解决方案:在bootstrap/app.php中手动设置app.timezone的值: config(['app.timezone' => 'America/Chicago']);

登录后才能进行评论,立即登录?