По подразбиране laravel предполага, че ще искате да имате различни конфигурации за различни среди. напр. в среда за тестване може да искате да имате различно потребителско име и парола, а в производствена среда различна. Тъй като laravel има толкова много конфигурационни файлове, бързо се превръща в кошмар да управлявате всички тях. Следователно laravel използва променливите на средата на PHP.
Това, което основно се казва, е, че ако искате да използвате променливите "среда", които laravel използва по подразбиране, трябва да поставите всичките си конфигурации в env()
метод, както вече беше споменато.
Ако не желаете да направите това, напр. за прости проекти, просто премахнете env от вашия код, както следва.
'mysql' => [
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'laravel',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
Имайте предвид, че можете да смесвате и съчетавате. т.е. можете да имате някои от променливите в env и някои самостоятелни.
Така че защо да използвате env
изобщо?
Да приемем, че приложението ви има 100 тестера, всички поставени на различни места. В laravel трябва да кодирате приблизително 8-10 конфигурационни файла. Също така трябва да version-control
тези файлове. Така че имате два проблема:
- Не искате да изпращате на всички 100 потребители едни и същи идентификационни данни. Също така те могат да използват различна база данни, кеш сървър и т.н., което означава, че ще имат различни конфигурации. Така че всеки потребител трябва да поддържа тези 8-10 конфигурационни файла на ръка.
- Не искате да изпращате тези конфигурационни файлове към контрола на версиите. Защото ако го направите, целият свят ще знае вашите тайни на API и вероятно ще се възползва от това (точно като парола). Също така, ако погледнете conf файловете на laravel, ще забележите, че има и друга информация като часова зона, свойство за отстраняване на грешки и т.н., които също са в conf файлове, и вие искате да ги контролирате с версията. И така, как да контролирате версиите на такива конфигурационни файлове и да скриете чувствителната си информация.
Отговорът е env
променливи. Laravel използва dotenv
чиято документация може да бъде намерена тук
. По принцип това са променливи, които живеят в един файл, наречен .env
в двойка ключ-стойност. Напр.
Примерно съдържание на .env файл
APP_DEBUG=false
APP_KEY=ABCDEFGH
...
След като дефинирате своя .env файл като този, можете да получите стойността с помощта на ключа като такъв env('APP_DEBUG')
.
Така че това решава гореспоменатия проблем по следните начини:
- запазвате
.env
файл за себе си. И също така декларирате друг файл, наречен.env.example
което е точно копие на оригиналния файл, с изключение на факта, че съдържа примерни стойности, а не вашите чувствителни стойности. След това предавате този нов примерен файл на всички. Те ще заменят примерните данни със собствена чувствителна информация. - Тъй като контролирате версията на примерния файл, можете да контролирате версията на всичките си conf файлове, тъй като те не съдържат тайната. Тайната е в .env файловете. Всички тези conf файлове съдържат стойности като тези
env('APP_KEY')
и действителната стойност се заменя по време на изпълнение с помощта на вашия .env файл.