Laravel 4.2 - 环境检测 - homestead.yaml 对比 start.php

Laravel 4.2 - Environment detection - homestead.yaml vs. start.php

Homestead版本:2.0.7

Laravel版本:4.2.16

我刚开始学习Laravel,我对start.php和homestead.yaml的环境配置有什么不同感到困惑。这是我拥有的:

start.php:

$env = $app->detectEnvironment(array(

   'local' => array('josh-linux'),
   'production' => array('homestead')

));

homestead.yaml:

variables:
- key: APP_ENV
  value: testing123

如果我 运行 'php artisan env' 在终端中显示 'local',如果我 ssh 进入我的 homestead 框和 运行 'php artisan env' 它说 'production',这是我所期望的。 (我只是将 'production' 放入其中以测试返回值)。

如果我在 hello.php 中抛出 <?php var_dump(getenv('APP_ENV')) ?> 并刷新页面,它会显示 'testing123',这是 homestead.yaml 中 APP_ENV 的设置。

我只是不知道什么时候使用每一个?如果在 start.php 文件中进行环境检测,那么 APP_ENV 值的用途是什么,反之亦然?另外,我是否应该 'local' 查找我的机器名称和 homestead 框名称?因为我也不确定检测 'homestead' 环境的意义。 (这是我第一次使用虚拟机,所以我确定我遗漏了什么)。

在您的 laravel 应用程序中获取环境的唯一方法应该是

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

或通过辅助外观

$environment = App::environment();

这样可以确保您不会得到不同的结果。


如果您想使用 homestead.yaml 环境变量而不是 laravel 4 的标准 start.php,您可以在 start.php:

$env = $app->detectEnvironment(function()
{
    return getenv('APP_ENV') ?: 'production';
});

现在它寻找 APP_ENV 变量,如果没有找到它默认为 production

php artisan env 命令应该输出与 App::environment();

相同的结果

Note

If you switch between laravel 4.2 and 5.0 make sure that you have in mind that the environment technique changed a little. See here for mor information:

Laravel 4.2: http://laravel.com/docs/4.2/configuration#environment-configuration
Laravel 5.0: http://laravel.com/docs/5.0/configuration#environment-configuration