Laravel, PHP

如何在 Laravel .env 中使用陣列(Array) 參數

Laravel 中會使用 .env 設定一些環境參數,以便在不同的環境下載入不同的設定檔。例如開發機、測試機或正式機。
但在部份情形下我們會需要在 .env 中使用 array 的陣列參數,應該怎麼做呢?

 

 

假設需要設定管理員 e-mail 做為通知用途,如:

.env
ADMINS_EMAIL=cola@admin.com.tw

不過若有多個管理員需要被通知而 .env 並無法設定 array / 陣列 傳入...

我們可以透過下面兩種方法達成這個需求:
方法一:字串分隔

.env
ADMINS_EMAIL=cola@admin.com.tw,boss@admin.com.tw,leader@admin.com.tw

 

在 config/mail.php 中加入

config/mail.php
'admins_mail' => env('ADMINS_EMAIL') ? array_filter(explode(',', env('ADMINS_EMAIL'))) : [];

 

之後只要透過 config() 就可以取得 array / 陣列 參數了

config('mail.admins_mail');
# return ['cola@admin.com.tw', 'boss@admin.com.tw', 'leader@admin.com.tw']

 

 

方法二:Json 字串

.env
ADMINS_EMAIL=['cola@admin.com.tw', 'boss@admin.com.tw', 'leader@admin.com.tw']

 

在 config/mail.php 中加入

config/mail.php
'admins_mail' => json_decode(env('ADMINS_EMAIL'), true) ? : [];

 

是不是非常簡單啊?
可以用於各種情境與應用哦
當然也別忘了 .env 未設定時的預設值哦

 

 

備註:

array_filter()

可以去除 ['array_1', 'array_2', '', 'array_4'] 中的空值,輸出為 ['array_1', 'array_2', 'array_4']
在這裡可以避免 .env ADMINS_EMAIL 中多餘的 "," 結尾造成陣列中的空值

http://php.net/manual/en/function.array-filter.php

 

json_decode(string $json, true)

第二個參數中的 true 強制回傳值為 array 而非 object

http://php.net/manual/en/function.json-decode.php

 

三元運算式 / Ternary Operator

本來的用法:

$my_default_val = $_GET['user_input'] ? $_GET['user_input'] : 'set_default_val';

PHP 5.3 之後的版本可以省略前面重覆的部份,例:

$my_default_val = $_GET['user_input'] ? : 'set_default_val';

不過要注意:如果判斷式中回傳值為 boolean 那省略的部份亦會是 boolean 值,例:

$my_default_val = isset($_GET['user_input']) ? : 'set_default_val';

實際試試吧~

http://php.net/manual/en/language.operators.comparison.php

發表迴響