在laravel中,可用「php artisan config:clear」語句清除config緩存,解決env取得不到資料的問題;問題產生的原因是快取設定檔透過env函數讀取環境變量,可能會導致該讀取不到環境變量,所以回傳null。
本文操作環境:Windows10系統、Laravel5.4版、Dell G3電腦。
解決方案:
清除config快取指令
php artisan config:clear
原因
在Laravel 中,如果執行php aritisan config:cache 指令,Laravel 會把app/config 目錄下的所有設定檔「編譯」整合成一個快取設定檔到bootstrap/cache/ config.php,每個設定檔都可以透過env 函數讀取環境變量,這裡是可以讀取的。但是一旦有了這個快取配置文件,在其他地方使用env 函數是讀取不到環境變數的,所以返回null.
讓我們看看這段程式碼,Illuminate/Foundation/Bootstrap/DetectEnvironment. php line 18:
public function bootstrap(Application $app){ if(!$app->configurationIsCached()){ $this->checkForSpecificEnvironmentFile($app); try{ (newDotenv($app->environmentPath(),$app->environmentFile()))->load(); }catch(InvalidPathException$e){ } } }
這個方法在框架啟動後就會運行,這段程式碼說明瞭如果存在快取配置文件,就不會去設定環境變數了,配置都讀取快取配置文件,而不會再唸環境變數了。
因此,在設定檔即app/config 目錄下的其他地方,讀取設定不要使用env 函數去讀環境變量,這樣你一旦執行php artisan config:cache 之後,env 函數就不起作用了。所有要用到的環境變量,在 app/config 目錄的設定檔中透過 env 讀取,其他地方要用到環境變量的都統一讀取設定檔而不是使用 env 函數讀取。
【相關推薦:laravel影片教學】
以上是laravel中env取得不到數據怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!