介绍
随着 Laravel 5 的引入和 PHPDotenv 的采用,Laravel 环境变量变得比以往任何时候都更容易使用。 在今天的教程中,我将向您介绍如何开始在项目中使用环境变量。
幸运的是,对于熟悉使用环境变量的其他框架或具有 Laravel 基本知识的任何人来说,这个过程都相对简单。
为什么应该使用环境变量
环境变量允许开发人员从他们的源代码中提取敏感凭证,并根据他们的工作环境使用不同的配置变量。
对于大多数开发人员来说,他们的本地计算机具有与生产环境不同的数据库凭据。 虽然不同的数据库凭据是生产环境和本地环境之间最常见的差异之一,但还有许多其他配置变量也可能不同。
一些可能不同的环境变量是:
- 我们想使用 [Mailtrap](http://mailtrap.io/ 在本地发送测试邮件并使用 Mandrill 在我们的生产服务器上发送真实邮件
- 我们为本地应用程序和生产应用程序提供不同的 Facebook 开发人员凭据
- 我们想将
file
用于本地 Laravel 会话,将redis
用于生产会话
您很可能还会有一个应用程序连接到的外部服务列表。 环境变量为您提供了一种从应用程序中提取这些变量的方法,甚至可以根据您的环境改变它们。
警告: 我们不想在 git repo 中保留安全凭证。
在创建和使用测试环境时,环境变量也非常有用。 开发人员可以相对轻松地在 testing
和 production
环境之间切换。 现在您了解了环境变量的一些好处,我们可以看看如何在您的应用程序中实现它们。
在您的应用程序中声明环境变量
成功的 Laravel 安装将在应用程序的根文件夹中包含一个 .env
示例文件。
如果您使用 Composer 安装 Laravel,那么您的 .env.example
文件将已经重命名为 .env
,如果您没有通过 Composer 安装,请继续重命名您的文件。
如果您在团队环境中工作,则保留 .env.example
文件并将其用作显示应用程序运行所需的环境变量的一种方式可能会有所帮助。
将 .env 排除在源代码控制之外
你的 .env
文件应该远离你的版本控制系统。 如果您使用的是 Git,则将 .env
文件添加到 .gitignore
文件中,这样它就不会被提交。 Laravel 在默认的 .gitignore
文件中自动为我们处理这个问题。
您的 .env
文件应该与此类似。
.env
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
。 该文件包含连接到数据库所需的信息。
配置/数据库.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, ],
请注意,大多数变量都是使用 env()
函数设置的。 env()
是 Laravel 内置的 辅助函数 之一。
env()
有两个参数,
.env
文件中环境变量的名称- 找不到环境变量时的默认值。
例如,如果您的 config/databse.php
MySql 部分和您的 .env
文件类似于下面的代码片段,您的应用程序将首先在 .env
文件中查找 DB_HOST
并且由于它已被声明,因此将 mysql
数组中的 host
设置为等于 myHost
。
配置/数据库.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, ],
.env
DB_HOST=myHost DB_DATABASE=myDB DB_USERNAME=myUsername DB_PASSWORD=mySecret
如果没有 DB_HOST
环境变量,则默认为 localhost
。 由于您的 .env
文件不在您的版本控制系统中,您需要在生产环境中创建一个 .env
文件。
在 Forge 中设置生产环境变量
在 Laravel Forge 上创建服务器时,有一种简单的方法可以设置这些环境变量。
要在 forge 中设置环境变量,请单击您的服务器,然后单击站点名称旁边的管理。 现在单击环境选项卡,您应该会看到类似于下面的内容。
单击编辑环境后,您将能够看到存储在服务器上的完整 .env
文件。 自由编辑!
如果您单击编辑环境,您现在可以继续并添加您的环境变量。
其他服务器
如果您使用 amazon 运行您的服务器,那么该过程的用户友好性会稍差一些。 您可以首先使用 SSH
命令连接到您的服务器,然后根据您的用户权限运行 vim .env
或 sudo vim .env
。 确保在 Laravel 应用程序文件夹的根目录下运行此命令。 通过运行 vim .env
您正在创建一个名为 .env 的新文件,然后在令人惊叹的 Vim 编辑器中打开它。
Vim 是用于 Unix 环境的基于文本的编辑器,稍加练习即可上手。 如果您是新手,您可以使用 i
添加文本,然后在完成后按 escape
按钮,然后按 :wq
。 :
通知 vim 你正在运行一个命令, wq
告诉 Vim 保存并退出。
结论
希望您现在对 Laravel 中的环境变量有了更好的理解。 对于希望在 MVC 框架中跨多个环境进行开发的任何人来说,环境变量都是必不可少的工具。
您不仅可以将敏感数据与应用程序代码分开,还可以节省在本地和生产环境之间切换的时间。
如有任何意见或问题,请随时与我们联系。 快乐编码!