随着 Laravel 5的引入和 PHPDotenv的采用,Laravel环境变量比以往任何时候都更容易使用。在今天的教程中,我将向您介绍如何在项目中开始使用环境变量。
幸运的是,对于熟悉使用环境变量的其他框架的人或对 Laravel有基本知识的人来说,这个过程相对简单。
为什么要使用环境变量
环境变量允许开发人员从源代码中提取敏感凭据,并根据其工作环境使用不同的配置变量。
对于大多数开发人员来说,他们的本地机器与他们的生产环境有不同的数据库凭据。虽然不同的数据库凭据是生产环境和本地环境之间最常见的区别之一,但还有许多其他配置变量也可能有所不同。
一些可能不同的环境变量是:
- 我们希望使用 Mailtrap在本地发送测试邮件,使用 Mandrill在我们的生产服务器上发送真正的电子邮件。
- 我们有不同的 facebook开发者对本地和生产应用的认证
- 我们希望在本地使用 Laravel会话文件,在生产过程中使用
redis
会话。
您很可能还有一个应用程序连接到的外部服务列表。环境变量为您提供了一种从应用程序中提取这些变量的方法,甚至可以根据您的环境进行更改。我们不希望在 git repo中保留安全凭据。
在创建和处理测试环境时,环境变量也可能非常有用。相对容易,开发人员可以切换
在 testing
和 production
环境之间。现在您已经了解了环境变量的一些好处,接下来我们可以看看如何在应用程序中实现它们。
在应用程序中声明环境变量
成功的 Laravel安装将在应用程序的根文件夹中包含一个 .env
示例文件。
如果您在 Composer中安装了 Laravel,而不是您的 .env.example
文件已经被重命名为 .env
,如果您没有通过 Composer安装,那么继续重命名您的文件。
如果您在团队环境中工作,那么离开 .env.example
文件并将其用作显示应用程序运行所需的环境变量的方法可能会有所帮助。
使.env远离源代码管理
您的 .env
文件应保留在版本控制系统之外。如果您正在使用Git,那么将 .env
文件添加到 .gitignore
文件中,这样就不会提交它。Laravel在默认的 .gitignore
文件中自动为我们处理这个问题。
您的 .env
文件应该类似于此。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | APP_ENV=local APP_DEBUG=true APP_KEY=SomeRandomString DB_HOST=localhost DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=sync |
数据库凭证
对于本例,我们将研究如何根据您的环境更改数据库配置。我们将从 config/database.php
开始。此文件保存连接到数据库所需的信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, ], |
请注意,大多数变量都是用 env()
函数设置的。 env()
是 Laravel中内置的帮助函数之一。
env()
采用两个参数,
.env
文件中环境变量的名称- 如果找不到环境变量,则为默认值。
例如,如果您的 config/databse.php
MySQL部分和 .env
文件类似于下面的代码片段,那么您的应用程序将首先在 .env
文件中查找 DB_HOST
,然后在MySQL数组中将主机设置为 myHost
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // config/database.php 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, ], |
1 2 3 4 5 6 7 8 | // .env DB_HOST=myHost DB_DATABASE=myDB DB_USERNAME=myUsername DB_PASSWORD=mySecret |
如果没有 DB_HOST
环境变量,那么它将默认为 localhost
。由于 .env
文件不在版本控制系统中,因此需要在生产环境中创建一个 .env
文件。
在Forge中设置生产环境变量
在 Laravel Forge上创建服务器时,有一种简单的方法可以设置这些环境变量。
若要在伪造中设置环境变量,请单击服务器,然后单击网站名称旁边的“管理”。现在,单击“环境”选项卡,您将看到类似于下面的内容。
单击编辑环境后,您将能够看到存储在服务器上的完整 .env
文件。自由编辑!
如果单击“编辑环境”,现在可以继续添加环境变量。
其他服务器
如果您正在使用 amazon运行您的服务器,那么这个过程对用户的友好程度就会降低一些。您可以首先使用SSH命令连接到服务器,然后根据用户权限运行 .env
或 sudo vim .env
。确保在 laravel applications文件夹的根目录中运行此命令。通过运行 vim .env
,您将创建一个名为.env的新文件,然后在 amazing Vim editor中打开它。
Vim是一个面向 Unix环境的基于文本的编辑器,通过一些实践就可以相对简单地了解它。如果您是新手,您可以使用 i
添加文本,然后在完成后按“转义”按钮,然后是 :wq
. :
。通知 Vim您正在运行一个命令,wq
告诉 Vim保存并退出。
结论
希望您现在对Laravel中的环境变量有了更好的理解。对于任何希望跨多个环境在 MVC框架中开发的人来说,环境变量是必不可少的工具。
不仅可以将敏感数据从应用程序代码中分离出来,而且还可以节省本地环境和生产环境之间的切换时间。
请随时与下面的评论或问题联系。编码愉快!
原文:https://scotch.io/tutorials/understanding-laravel-environment-variables