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

可樂

Recent Posts

plain PHP 搭配 Slack 進行錯誤追蹤、回報(Error Tracking、Error Handling)

錯誤追蹤、回報非常重要,看到的錯誤才知道怎麼修。現今 PHP 流行的 Laravel 有很好的 Error Tracking, Error Handling。但 plain PHP 怎麼辦呢? 在 production 為了安全考量會設定…

4 years ago

Drone CI/CD 配合 Github 使用 Rsync 進行 Deploy

jenkins、circleci、travis 或 Gitlab CI 皆為目前暫知名的 CI/CD 服務,各自缺點也不言而喻...過於肥大、收費略高(?)、速度不夠快執問題...此時使用 go language 開發的 Drone 就出現啦,完全 docker 容器化的運行方式讓整個 CI…

4 years ago

Nginx brotli 設定

網頁壓縮技術中 gzip 很好用,deflate 己經過時,但你聽過 brotli 嗎? 有著比 gzip 更好、更快的壓縮效率。看起來利大於弊有什麼不用他的理由嗎?簡單從優、缺點來看 brotli!到底 brotli 布羅特利是什麼、如何設定呢。 目前大多的 web server…

4 years ago

本機使用 Docker 容器內 PHP (wrapper/expose PHP)

為什麼要讓本機使用 Docker 內 PHP? 情境... docker 容器內用的是 PHP 7.4 但你的開發本機還在跑 PHP 5.6 或是更舊,因為 dockerize 的關係會將所有相關環境都轉移到…

4 years ago

為什麼你需要密碼管理工具

為什麼你需要密碼管理工具現代人一天下來需要輸入多少組密碼,工作與生活己經和密碼密不可分! 除了足夠全安的密碼,密碼記錄、儲存的方式又足夠安全嗎?密碼管理工具可以帶來什麼幫助呢? 為什麼你需要密碼管理工具 資安問題!!大多人說著沒做壞事不怕被偷資料、監聽。嚴重曝露出現代人的基本科技素養的低落和無知 🤯 密碼的使用無所不在!! 行動裝置的普及,APP 、手機遊戲、銀行帳戶所有和生活相關的東西都需要密碼!!facebook, line 只要打開 APP 也會輸入密碼只是他是自動輸入、一般情況不可視 (auth token) 一般人最常發生的密碼資安問題…

4 years ago

簡單使用 Mysql Partition 優化查詢

mysql 資料表分區 mysql table partition 從架構上調整 mysql 的查詢效率。mysql DB 的優化可以簡單也能複雜,除了調整設定值。也可以透過水平分割(Horizontal Partitioning)、垂直分割(Vertical Partitioning) 分庫或分表將資料分散儲存減少資料搜尋、group by 時的效能消耗。拆開批次處理,理論上效率都會變好,本文就水平分割的…

4 years ago