# 配置
- [介紹](#introduction)
- [環境配置](#environment-configuration)
- [檢索環境配置](#retrieving-environment-configuration)
- [確定當前環境](#determining-the-current-environment)
- [訪問配置值](#accessing-configuration-values)
- [配置緩存](#configuration-caching)
- [維護模式](#maintenance-mode)
<a name="introduction"></a>
## 介紹
Laravel 框架的所有配置文件都保存在 `config` 目錄中。 每個選項都有說明,你可隨時查看這些文件并熟悉都有哪些配置選項可供你使用。
<a name="environment-configuration"></a>
## 環境配置
對于應用程序運行的環境來說,不同的環境有不同的配置通常是很有用的。 例如,你可能希望在本地使用的緩存驅動不同于生產服務器所使用的緩存驅動。
Laravel 利用 Vance Lucas 的 PHP 庫 [DotEnv](https://github.com/vlucas/phpdotenv) 使得此項功能的實現變得非常簡單。在新安裝好的 Laravel 應用程序中,其根目錄會包含一個 `.env.example` 文件。如果是通過 Composer 安裝的 Laravel,該文件會自動更名為 `.env`。否則,需要你手動更改一下文件名。
你的 `.env` 文件不應該提交到應用程序的源代碼控制系統中,因為每個使用你的應用程序的開發人員 / 服務器可能需要有一個不同的環境配置。此外,在入侵者獲得你的源代碼控制倉庫的訪問權的情況下,這會成為一個安全隱患,因為任何敏感的憑據都被暴露了。
如果是團隊開發,則可能希望應用程序中仍包含 ` .env.example` 文件。因為通過在示例配置文件中放置占位值,團隊中的其他開發人員可以清楚地看到哪些環境變量是運行應用程序所必需的。你也可以創建一個 `.env.testing` 文件,當運行 PHPUnit 測試或以 `--env=testing` 為選項執行 Artisan 命令時,該文件將覆蓋 `.env` 文件中的值。
> {tip} `.env` 文件中的所有變量都可被外部環境變量(比如服務器級或系統級環境變量)所覆蓋。
<a name="retrieving-environment-configuration"></a>
### 檢索環境配置
當應用程序收到請求時,`.env` 文件中列出的所有變量將被加載到 PHP 的超級全局變量 `$ _ENV` 中。你可以使用 `env` 函數檢索這些變量的值。事實上,如果你查看 Laravel 的配置文件,你就能注意到有數個選項已經使用了這個函數:
'debug' => env('APP_DEBUG', false),
傳遞給 `env` 函數的第二個值是「默認值」。如果給定的鍵不存在環境變量,則會使用該值。
<a name="determining-the-current-environment"></a>
### 確定當前環境
應用程序當前所處環境是通過 `.env` 文件中的 `APP_ENV` 變量確定的。你可以通過 `App` [facade](/docs/{{version}}/facades) 中的 `environment` 方法來訪問此值:
$environment = App::environment();
你還可以傳遞參數給 `environment` 方法,以檢查當前的環境配置是否與給定值匹配。 如果與給定值匹配,該方法將返回 `true`:
if (App::environment('local')) {
// 環境為 local
}
if (App::environment(['local', 'staging'])) {
// 環境為 local 或 staging
}
> {tip} 應用程序當前所處環境檢測可以被服務器級的 `APP_ENV` 環境變量覆蓋。這為相同的應用程序配置不同的環境時是非常有用的,這樣你可以在你的服務器配置中為給定的主機設置與其匹配的給定的環境。
<a name="accessing-configuration-values"></a>
## 訪問配置值
你可以輕松地在應用程序的任何位置使用全局 `config` 函數來訪問配置值。配置值的訪問可以使用「點」語法,這其中包含了要訪問的文件和選項的名稱。還可以指定默認值,如果配置選項不存在,則返回默認值:
$value = config('app.timezone');
要在運行時設置配置值,傳遞一個數組給 `config` 函數:
config(['app.timezone' => 'America/Chicago']);
<a name="configuration-caching"></a>
## 配置緩存
為了給你的應用程序提升速度,你應該使用 Artisan 命令 `config:cache` 將所有的配置文件緩存到單個文件中。這會把你的應用程序中所有的配置選項合并成一個單一的文件,然后框架會快速加載這個文件。
通常來說,你應該把運行 `php artisan config:cache` 命令作為生產環境部署常規的一部分。這個命令不應在本地開發環境下運行,因為配置選項在應用程序開發過程中是經常需要被更改的。
> {note} 如果在部署過程中執行 `config:cache` 命令,那你應該確保只從配置文件內部調用 `env` 函數。
<a name="maintenance-mode"></a>
## 維護模式
當應用程序處于維護模式時,所有對應用程序的請求都顯示為一個自定義視圖。這樣可以在更新或執行維護時輕松地「關閉」你的應用程序。 維護模式檢查包含在應用程序的默認中間件棧中。如果應用程序處于維護模式,則將拋出一個狀態碼為 503 的 `MaintenanceModeException` 異常。
要啟用維護模式,只需執行下面的 Artisan 命令 `down`:
php artisan down
你還可以向 down 命令提供 `message` 和 `retry` 選項。其中 message 選項的值可用于顯示或記錄自定義消息,而 retry 值可用于設置 HTTP 請求頭中 `Retry-After` 的值:
php artisan down --message="Upgrading Database" --retry=60
要關閉維護模式,請使用 `up` 命令:
php artisan up
> {tip} 你可以通過修改 `resources/views/errors/503.blade.php` 模板文件來自定義默認維護模式模板。
#### 維護模式和隊列
當應用程序處于維護模式時,不會處理 [隊列任務](/docs/{{version}}/queues)。而這些任務會在應用程序退出維護模式后再繼續處理。
#### 維護模式的替代方案
維護模式會導致應用程序有數秒的停機(不響應)時間,因此你可以考慮使用像 [Envoyer](https://envoyer.io) 這樣的替代方案,以便與 Laravel 完成零停機時間部署。
## 譯者署名
| 用戶名 | 頭像 | 職能 | 簽名 |
| --- | --- | --- | --- |
| [@痛飲狂歌](https://laravel-china.org/users/7636) | <img class="avatar-66 rm-style" src="https://dn-phphub.qbox.me/uploads/avatars/7636_1500076845.png?imageView2/1/w/100/h/100"> | 翻譯 | 獨立開發者,全棧工程師 |
| [@JokerLinly](https://laravel-china.org/users/5350) | <img class="avatar-66 rm-style" src="https://dn-phphub.qbox.me/uploads/avatars/5350_1481857380.jpg"> | Review | Stay Hungry. Stay Foolish. |
---
> {note} 歡迎任何形式的轉載,但請務必注明出處,尊重他人勞動共創開源社區。
>
> 轉載請注明:本文檔由 Laravel China 社區 [laravel-china.org](https://laravel-china.org) 組織翻譯,詳見 [翻譯召集帖](https://laravel-china.org/topics/5756/laravel-55-document-translation-call-come-and-join-the-translation)。
>
> 文檔永久地址: https://d.laravel-china.org
- 說明
- 翻譯說明
- 發行說明
- 升級說明
- 貢獻導引
- 入門指南
- 安裝
- 配置信息
- 文件夾結構
- HomeStead
- Valet
- 核心架構
- 請求周期
- 服務容器
- 服務提供者
- 門面(Facades)
- Contracts
- 基礎功能
- 路由
- 中間件
- CSRF 保護
- 控制器
- 請求
- 響應
- 視圖
- 重定向
- Session
- 表單驗證
- 錯誤與日志
- 前端開發
- Blade 模板
- 本地化
- 前端指南
- 編輯資源 Mix
- 安全
- 用戶認證
- API認證
- 用戶授權
- 加密解密
- 哈希
- 重置密碼
- 綜合話題
- Artisan 命令行
- 廣播系統
- 緩存系統
- 集合
- 事件系統
- 文件存儲
- 輔助函數
- 郵件發送
- 消息通知
- 擴展包開發
- 隊列
- 任務調度
- 數據庫
- 快速入門
- 查詢構造器
- 分頁
- 數據庫遷移
- 數據填充
- Redis
- Eloquent ORM
- 快速入門
- 模型關聯
- Eloquent 集合
- 修改器
- API 資源
- 序列化
- 測試
- 快速入門
- HTTP 測試
- 瀏覽器測試 Dusk
- 數據庫測試
- 測試模擬器
- 官方擴展包
- Cashier 交易工具包
- Envoy 部署工具
- Horizon
- Passport OAuth 認證
- Scout 全文搜索
- Socialite 社交化登錄
- 交流說明