前言
最近又在鞏固Laravel
進階課程,平時的工作使用的不是Laravel
框架,很多的知識點和原理都忘記的差不多了,我想我每次學習完一節課程,可不可以記錄下自己的學習感受呢,這樣下次忘記的時候翻閱文章把忘記的地方拾起來。
以前我的學習都是用思維導圖,或者在課程最後寫下一些自己的感受,但是寫的都太碎片了,有的沒的,所以我想把內容豐富一下,結合自己的理解,再加上一些思考,這樣文章也比較有內容一下。
Laravel中的配置檔案
Laravel
框架的配置檔案有很多,除了預設的配置檔案外,你安裝的擴充套件也會有配置檔案,瞭解配置檔案就很重要。
比如你要修改資料庫的密碼賬戶,那必須的修改資料據配置檔案database.php
,修改Session
的配置檔案session.php
。各式各樣的配置檔案的功能不一樣,不同作用的配置會在不同的檔案中,那麼到底有那些配置檔案,這裡簡單的列舉一下。
- app.php
- auth.php
- cache.php
- database.php
- mail.php
上面我列舉了一些配置檔案,還有一些配置檔案就不貼出來了,可以到專案的根目錄中config
目錄下檢視,這個目錄存放的就是框架的配置檔案,一些第三方擴充套件的配置檔案也會放在config
目錄下。
我的學習方法是對這些配置檔案不做了解,只要知道app.php
是應用配置相關的,比如時區、語言、bug模式等的,database.php
是資料庫配置相關的,其他的用到了再說,一下子學習太多忘得也是飛快的。
配置檔案裡面都有什麼呢,很簡單,就是定義了一個陣列,然後返回這個陣列即可,以app.php
配置檔案為例
return [
'connections' => [
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'useTLS' => true,
],
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
],
'log' => [
'driver' => 'log',
],
'null' => [
'driver' => 'null',
],
],
];
配置檔案中有很多的配置項,這些配置項組成了一個個配置檔案,通過這些配置檔案完成專案各種服務的配置。
修改配置
配置檔案常用的操作就是修改配置了,修改配置用兩種方法,第一種配置就是直接修改配置檔案,這種方式最簡單也是最直接的,不過這種方案在Laravel
中不太建議,這是因為有些配置修改起來還是很頻繁的。比如修改debug模式,本地開發需要開啟debug模式,生產環境需要關閉它,如果我們直接修改app.php
檔案,如果稍加不注意還會導致其他問題。如果我們使用了git
來管理專案,這個app.php
修改就會納入到版本管理中,需要提交修改,但是這個修改沒有意義。
env函式
從上面得知直接修改配置檔案不好,優雅的方案是修改.env
檔案,我們把常規的配置放在.env
檔案中,然後通過env()
函式讀取。env
檔案中的配置,比如讀取.env
檔案中資料庫使用者名稱的配置可以用env('DB_DATABASE','root')
,這樣就可以獲取資料庫的使用者名稱了,然後在database.php
檔案用呼叫env
函式。
return [
....
'mysql' => [
'database' => env('DB_DATABASE', 'forge'),
]
....
]
這樣一來我們就可以不用修改database.php
檔案的配置項,通過修改.env
檔案對應的配置即可,同時這次修改不會納入到git
版本庫中,這是因為.env
檔案被git
設定成忽略狀態。
env
函式讀取的是.env
檔案中的配置,我們看下這個檔案中都有些什麼。
....
APP_NAME=bbs
APP_ENV=local
APP_KEY=base64:vRlNNAiIyAZOlfQJ5vswjD2M4Rsus17kUWwRgbLodko=
APP_DEBUG=true
...
可以看到這個檔案不是一個php
檔案,配置項的格式是配置項名稱=xxx
,我們也可以新增自己的配置項,比如加一個時間配置TIMEZONE=Asia/Shangehai
,通過env('TIMEZONE')
進行讀取。env
函式的第二個引數是設定預設值,意思就是說如果.env
檔案沒有這個配置項那麼它的返回值是第二個引數。
如果我們給.env
檔案新增了配置項,記得把新增的配置新增到.env.example
檔案中,這個檔案會納入到版本庫中,方便我們上線進行使用這些新增的配置。
config函式
如果我要的配置不在.env
檔案中而在mail.php
檔案中,我要臨時設定和讀取該怎麼辦,這個時候我們就要使用config
函式了,這個函式在使用上有些特色,我們一一說。
比如我現在要讀取mail.php
檔案中的driver
配置項,可以使用config('mail.driver')
, 如果要獲取mail.php
檔案中所有的配置項可以使用config('mail')
,注意兩種方式的區別。
如果我們想臨時的修改配置,但是又不像讓它生效,可以使用config(['mail.driver'=>'sendmail'])
,這樣郵箱配置中的驅動配置就改為了sendmail
,不過這種方式是臨時的,並不會寫入到配置檔案中。
探索
在課程中我們知道要修改語言和時區,課程中採用的是修改config.php
檔案,其實也可以在.env
檔案中設定時區和語言的配置項,然後在app.php
檔案中使用env
函式讀取即可。
下面演示一下這種做法。
#.env檔案新增如下內容
APP_TIMEZONE=Shanghai
APP_LOCALE=zh-CN
# app.php檔案修改如下內容
'timezone' => env('APP_TIMEZONE','PRC'),
'locale' => env('APP_LOCALE','en'),
記得上面在.env
檔案中新增的內容,同時也新增到.env.example
檔案中。
不過這麼做也有不好的地方,首先時區和語言一般都不會修改,把這種不太容易修改的配置放在.env
檔案種,會導致.env
檔案越來越臃腫,所以不常用的配置我們還是建議放在對應的配置檔案種進行配置,不要新增到.env
檔案。
這種只是列出另外一種設定配置的方式,你也可以根據你的專案需求採用合理的方案,合適自己的才是最好的。
總結
以上就是關於配置檔案相關的內容,不過文章關於配置檔案的內容停留在使用層面,Laravel
中原始碼是什麼樣子的,這裡就沒有列舉了,以及env
如何工作這裡都沒有討論,以後有機會再說吧。
本作品採用《CC 協議》,轉載必須註明作者和本文連結