Laravel 不同開發環境設定

Laravel PHP Framework

Laravel 本來預設的 Environment Configuration 是透過 Domain Name 來區分,程式碼 bootstrap/start.php 如下

<?php
$env = $app->detectEnvironment(array(
    'local' => array('your-machine-name'),
));

我們可以根據上述程式碼產生不同的開發環境,像是 develop, production, staging… 等,根據不同的 Domain 給予不同的環境設定檔。但是根據使用 Domain Name 來區分各種不同的環境換產生兩種問題

  • 如果想單一 Domain 跑多種環境?
  • 多個 Domain 增加 Nginx 或 Apache 的設定檔

老實講用 Domain 來分類蠻不方便的,如果突然想要在同一個 Domain 使用不同的環境設定,又要改 Domain mapping。所以 Laravel 也不是強制要使用這方法,我們可以透過增加 environment.php 來決定目前專案跑哪一種環境設定,該程式碼只有一行

<?php

return "production";
/* End of bootstrap/environment.php */

那當然我們也要將 detectEnvironment 改成

$env = $app->detectEnvironment(function() {

    // Defined in the server configuration
    if ( isset( $_SERVER['APP_ENVIRONMENT'] ) ) {
        return $_SERVER['APP_ENVIRONMENT'];

    // Look for ./environment.php
    } elseif ( file_exists( __DIR__ . '/environment.php' ) ) {
        return include __DIR__ . '/environment.php';

    // set default configuration
    } else {
        return 'local';
    }

});

Apaceh 可以直接在設定檔內定義變數如下,Laravel 可以透過 $_SERVER['APP_ENVIRONMENT'] 取環境變數。如果沒有設定 Apache 變數,則讀取 bootstrap/environment.php,最後才會讀取預設值。

SetEnv APP_ENVIRONMENT development