設定

簡介

所有關於 Laravel 框架的設定文件都被放置在 app/config 目錄下。每個文件裡的所有選項都有文件,因此你可以輕鬆地察看這些文件,並且熟悉這些選項配置。

有時候,你可能在運行時需要存取這些設定值,你可以使用 Config 類別:

存取一個選項的值

Config::get('app.timezone');

如果選項值不存在,你可以指定一個預設值:

$timezone = Config::get('app.timezone', 'UTC');

設定選項值

注意,「點」式語法可以用來存取不同設定文件裡的選項。你還可以在運行階段更改設定值:

Config::set('database.default', 'sqlite');

在運行階段設定的選項值只在該次請求中有效,不會對其他的請求造成影響。

環境配置

通常應用程式常常需要根據不同的運行環境而有不同的配置設定值。例如,你會希望在你的本地開發機器上會有與正式環境不同的緩存驅動(cache driver),透過設定檔案,這是非常容易達成的。

config 目錄下建立與環境名稱相同的目錄,例如 local。接下來,創建你想要覆寫的設定文件,並且設定該環境所希望的設定值。例如,你要在 app/config/local 建立 cache.php 檔案,內容如下:

<?php

return array(

    'driver' => 'file',

);

註: 請勿使用「testing」當作環境名稱,它是專門為單元測試保留的。

注意,你不需要為基本設定文件中的_所有_選項設定選項值,只需要指定你需要覆蓋的配置選項即可。環境配置文件將會以「cascade」的方式覆蓋基本設定文件。

接下來,我們需要讓框架知道如何確認其運行環境。預設環境是 production。然而,你可以在安裝目錄下的 bootstrap/start.php 文件中設定其他環境。在該文件中,你可以找到 $app->detectEnvironment 函式。該陣列將會用來偵測當前的運行環境。你可以根據你的需求增加環境或者是機器名稱。

<?php

$env = $app->detectEnvironment(array(

    'local' => array('your-machine-name'),

));

在這個範例中,「local」是運行環境的名稱而「your-machine-name」是你的服務器的主機名稱。在 Linux 和 Mac 上,你可以透過命令列執行 hostsname 查到你的主機名稱。

如果你想要更靈活的環境偵測方式,可以傳遞一個 閉包(Closure)detectEnvironment 函式,這樣你就可以按照你想要的方式偵測了:

$env = $app->detectEnvironment(function()
{
    return $_SERVER['MY_LARAVEL_ENV'];
});

存取目前的運行環境

你也可以透過 environment 函式來取的目前運行階段的環境:

$environment = App::environment();

你也可以傳遞參數至 environment 函式中,來確認目前的環境是否與參數相符合:

if (App::environment('local'))
{
    // 當環境為 local 時
}

if (App::environment('local', 'staging'))
{
    // 環境為 local 或 staging...
}

供應商設定

當使用環境設定時,你會想要「附加」環境 服務供應商 到你主要的 app 設定檔中。然而,如果你這樣做,你會發現環境 app 供應商將會覆蓋掉你主要 app 設定檔的供應商。如果要附加供應商,在你的環境 app 設定檔中使用 append_config helper 方法:

'providers' => append_config(array(
    'LocalOnlyServiceProvider',
))

保護敏感設定

對於一個「實際」的應用程式,讓敏感的設定不要放在你的設定檔中才是明智的抉擇。像是資料庫密碼,Stripe API 金鑰和加密金鑰都應該盡可能地不要存在設定檔中。所以,該放在哪裡?很慶幸的,Laravel 提供了一個非常簡單的方式:使用「點開頭」的檔案來保存這種類型的設定。

首先,設定你的應用程式 來識別你的機器是否在 local 環境中。然後創建一個 .env.local.php 檔案在你的專案最上層目錄中(一般而言與 composer.json 檔案同目錄)。.env.local.php 將會回傳一個鍵值組的陣列,類似於一般的 Laravel 設定檔:

<?php

return array(

    'TEST_STRIPE_KEY' => 'super-secret-sauce',

);

所有在這個檔案中的鍵值組將會被回傳,並轉成 PHP 的超級全域變數 $_ENV$_SERVER。你可以在你的設定檔中透過這些全域變數存取:

'key' => $_ENV['TEST_STRIPE_KEY']

請確認將 .env.local.php 加進你的 .gitignore 檔案中。他可以讓你的團隊成員可以創建自己的本機環境設定檔,也可以將敏感設定從版本控制系統中隱藏。

現在,在你的正式環境中,創建一個包含正式環境敏感設定值的 .env.php 於你專案的最上層目錄。如同 .env.local.php,正式環境的 .env.php 也不應該在版本控制系統中。

附註: 你可以為每個有支援的環境創建所屬的設定檔案。例如,development 環境下,如果 .env.development.php 檔案若存在將會自動讀取進來。

維護模式

當你的應用程式處於維護模式時,所有的路由都會指向一個自定的視圖。當你要更新或進行維護作業時,「關閉」整個網站是很簡單的。App::down 函式已經定義在你的 app/start/global.php 檔案中。他將會在你的應用程式處於維護模式時將執行該函式,展現在用戶前。

啟用維護模式,只要執行 Artisan 指令「down」:

php artisan down

關閉維護模式,只要執行 Artisan 指令「up」:

php artisan up

如果你想要客製化維護模式的視圖,你只需要增加下面內容至應用程式裡的 app/start/global.php 檔案中:

App::down(function()
{
    return Response::view('maintenance', array(), 503);
});

如果傳給 down 函式的閉包回傳「NULL」值,該此請求將會略過維護模式。

維護模式與隊列

當應用程式處於維護模式中,將不會處理任何 隊列工作。所有的隊列工作將會在應用程式離開維護模式後繼續被進行。