2016年11月10日 星期四

如何在 Laravel .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 中多餘的 “," 結尾造成陣列中的空值

json_decode(string $json, true)
第二個參數中的 true 強制回傳值為 array 而非 object

三元運算式 / 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’;

實際試試吧~

from : https://cola.workxplay.net/laravel-return-array-from-dotenv/

沒有留言:

wibiya widget