Laravel 中的环境驱动型数据库设置?
我正在移动Laravel框架,但我在数据库设置方面遇到了问题,
具体来说,我已经设置了我的环境,它们对于应用程序.php配置文件工作正常,但是数据库.php配置文件似乎没有效果。
即使我的环境文件夹中有一个数据库.php配置文件,它也永远不会加载,我将一堆无效字符(键盘混搭)放入文件中以使php抛出错误,但它从未被击中。
Laravel 是否不支持基于环境的数据库设置?还是我做错了?
我正在移动Laravel框架,但我在数据库设置方面遇到了问题,
具体来说,我已经设置了我的环境,它们对于应用程序.php配置文件工作正常,但是数据库.php配置文件似乎没有效果。
即使我的环境文件夹中有一个数据库.php配置文件,它也永远不会加载,我将一堆无效字符(键盘混搭)放入文件中以使php抛出错误,但它从未被击中。
Laravel 是否不支持基于环境的数据库设置?还是我做错了?
您绝对可以按环境设置数据库设置(以及任何其他配置设置)。
对于Laravel 3(对于Laravel 4和Laravel 5,见下文):
首先 - 您需要在中定义并将其设置为如下所示:$environments
paths.php
$environments = array(
'development' => array('*.dev'),
'production' => array('*.com'),
);
Laravel 将自动查找此变量,如果已设置,将使用关联的配置。
通常你有一个文件夹,其设置如和config
database.php
auth.php
现在,只需为您计划使用的每个文件夹(例如“开发”)创建一个新文件夹即可。你最终会得到一个这样的文件夹结构;Laravel_Env
/application
/config
/development
database.php
/production
database.php
application.php
config.php
database.php
...
user_agents.php
您会注意到我只包含在每个子文件夹中。Laravel 将始终首先加载默认配置设置,然后使用环境设置中的任何自定义配置覆盖它们。database.php
最后,在你的开发/数据库文件中,你会有这样的东西;
<?php
return array(
'default' => 'mysql'
);
p.s. 我刚刚在 Laravel 的当前 3.2.12 版本中对此进行了测试 - 它绝对有效。
额外提示:您还可以为 Artisan 自动设置环境,这样就不必在每个命令行上手动包含环境!为此,请执行以下操作:
您需要知道您正在运行Artisan的“主机名”。要找出答案 - 暂时编辑根文件夹中的,并添加到第2行(即高于所有内容)。artisan.php
var_dump(gethostname());
从命令行运行。您将获得一个带有主机名的字符串转储。在我的情况下,它的“TSE-Win7”;php artisan
删除对文件的更改artisan.php
将您的主机名(即“TSE-Win7”)添加到环境中。
你最终应该得到这样的东西:
$environments = array(
'development' => array('*.dev', 'TSE-Win7'),
'production' => array('*.com'),
);
Artisan 现在将使用您的开发环境运行。如果您部署到实时服务器 - 重新运行这些步骤以获取服务器的 hostname(),您可以仅为服务器配置特定的 artisan 配置!
对于Laravel 4:
默认环境始终为 。但是在开始时.php文件中,您可以定义其他环境。production
$env = $app->detectEnvironment(array(
'local' => array('your-machine-name'),
));
在Linux和Mac上,您可以在终端中按类型确定 - 它将输出计算机的名称。在Windows上,放在文件的开头 - 并运行网站一次 - 它将显示计算机的当前主机名。hostname
hostname
dd(gethostname());
routes.php
要将当前环境作为应用程序中的变量获取 - 请在此处阅读此 SO 答案。Laravel 4:如何获得环境价值?
对于Laravel 5:
有一个配置文件,在根目录中调用。观看此 laracast,配置已完全解释。.env
如果您使用的是 artisan ( laravel 的命令行 )您需要添加的每个命令
artisan bla bla bla --env=Development
或
artisan bla bla bla --env=Production