php – Laravel中的环境驱动的数据库设置?

我正在移动Laravel框架,但我遇到了数据库设置问题,

具体来说,我有我的环境设置,他们正在为application.php配置文件工作正常,但database.php配置文件似乎没有任何效果.

即使我在我的环境文件夹中有一个database.php配置文件它永远不会被加载,我将一堆无效字符(键盘mash)放入文件中以使php抛出错误,但它永远不会被命中.

Laravel不支持基于环境的数据库设置吗?或者我做错了吗?

最佳答案
您绝对可以按环境设置数据库设置(以及任何其他配置设置).

Laravel 3(Laravel 4和Laravel 5见下文):

首先 – 您需要在paths.php中定义$environment并将其设置为以下内容:

$environments = array(
  'development' => array('*.dev'),
  'production' => array('*.com'),
);

Laravel将自动查找此变量,如果设置,将使用关联的配置.

通常,您有一个配置文件夹,其中包含database.php和auth.php等设置

现在只需为您计划使用的每个Laravel_Env创建一个新文件夹(例如Development).你最终会得到像这样的文件夹结构;

/application
  /config
    /development
      database.php
    /production
      database.php
    application.php
    config.php
    database.php
    ...
    user_agents.php

你会注意到我在每个子文件夹中只包含了database.php. Laravel将始终首先加载默认配置设置,然后使用环境设置中的任何自定义配置覆盖它们.

最后,在你的开发/数据库文件中,你会有这样的东西;

<?php
 return array(
'default' => 'mysql'
 );

附:我刚刚在Laravel目前的3.2.12版本上进行了测试 – 这绝对有效.

额外提示:您还可以自动为Artisan设置环境,因此您不必在每个命令行上手动包含环境!去做这个:

>您需要知道您正在运行Artisan的“主机名”.要找出 – 暂时编辑根文件夹中的artisan.php,并添加var_dump(gethostname());到第2行(即高于一切).
>从命令行运行php artisan.您将获得包含主机名的字符串转储.在我的情况下它的“TSE-Win7”;
>删除artisan.php文件的更改
>将您的主机名(即“TSE-Win7”)添加到环境中.

你应该得到这样的东西:

$environments = array(
  'development' => array('*.dev', 'TSE-Win7'),
  'production' => array('*.com'),
);

Artisan现在将使用您的开发环境运行.如果部署到实时服务器 – 重新运行这些步骤以获取服务器的hostname(),并且可以为服务器配置特定的工匠配置!

对于Laravel 4:

默认环境始终是生产.但是在start.php文件中,您可以定义其他环境.

 $env = $app->detectEnvironment(array(
   'local' => array('your-machine-name'),
));

在Linux和Mac上,您可以在终端中按类型主机名确定主机名 – 它将输出您的计算机的名称.在Windows上放dd(gethostname());在routes.php文件的开头 – 并运行一次网站 – 它将显示您计算机的当前主机名.

要将当前环境作为应用程序中的变量获取 – 请在此处阅读此SO答案. Laravel 4: how can I get the environment value?

对于Laravel 5:

根目录中有一个名为.env的配置文件.
Watch this laracast,config完全解释.

转载注明原文:php – Laravel中的环境驱动的数据库设置? - 代码日志