Laravel技巧篇,將與主線「Laravel 學習筆記」不同的時間線,將不會「保姆式」的教學,只是分享平時我們開發時遇上的問題/發現好用的Laravel技巧
Laravel 執行了php artisan config:cache
就無法讀取env部分內容?!
發現問題
Laravel 本身就有使用 env 文件
,但在系統上線後我們為了提升速度,我們一般會執行下面這句,把config cache起來
php artisan config:cache
這樣一來,你在env中的數據庫連線
、MAIL_MAILER
等等的設定仍然是有效的
但如果你是自己手動新增了一些數值呢?
比如我在env有下面這一行,設定了
COMMENT_ON_PAGE = 15
如果我們再去嘗試讀取:
echo env('COMMENT_ON_PAGE');
原本會顯示15
,但因為執行了
,就無法顯示了php artisan config:cache
解決方案
1. 檢查&了解原理
你去檢查一下config/app.php
中的aliases
是否已有下面這一行
'aliases' => [
...
'Config' => Illuminate\Support\Facades\Config::class,
...
]
官方已做了個Config的Facades給我們使用
2. 建立一個 [常用變量] 文件
去config
目錄中建議,比如名為 config/setting.php
<?php
return [
'COMMENT_ON_PAGE' => env('COMMENT_ON_PAGE'),
'ADMIN_NAME' => 'Peter',
];
完成設定後執行一次
php artisan config:clear
php artisan config:cache
3. 如何使用
因為命名了文件名為setting,所以用以下方法
echo Config('setting.COMMENT_ON_PAGE');
echo Config('setting.ADMIN_NAME');
你分別會看到 env 中的 COMMENT_ON_PAGE
數值,以及你直接在setting.php中所填寫的ADMIN_NAME
Peter
4.注意事項
-
雖然上面的例子,
Peter
成功顯示了出來,建議仍然使用env來做主力的配置文件
、常用變量文件
,因為大部分人都是在env做網站配置,只不過是在config cache
後會有少少問題,所以才這樣來解決 -
建議把所有env中,你自行新增的變量全部都新增一份去
-
如果你已用了
php artisan config:cache
,每次修改config文件
或env文件
你都需要執行一次clear
再執行一次cache
-
這個其實不算是技巧,反而應該說是用來解決官方的小漏洞?編寫此文章時已經是Laravel9,但仍然會有此問題
後話一:開發段階或測試階段不要開config:cache
除非你真的是在針對cache做測試,而我是為了把速度提高而進行的測試,所以給我在網站推出前,先發現到問題!
但在線上的版本強烈建議一定要打開,因為頁一個需要900ms 的頁面一下子加速至只需要400ms,速度提升接近1倍有多
後話二:optimize
一口氣做所有加速
php artisan optimize
執行後你會看到
Configuration cache cleared!
Configuration cached successfully!
Route cache cleared!
Routes cached successfully!
Files cached successfully!
ref1: https://github.com/laravel/framework/issues/33613#issuecomment-662087677
ref2: https://www.digitalocean.com/community/tutorials/how-to-use-laravel-config-files
近期留言