Laravel 中的配置檔案

softer發表於2020-05-27

前言

最近又在鞏固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 協議》,轉載必須註明作者和本文連結

相關文章