【问题标题】:Laravel 5 Changing Environment to match URLLaravel 5 更改环境以匹配 URL
【发布时间】:2015-02-05 11:46:44
【问题描述】:

我已经安装了 Laravel 的新副本。

我需要它,所以我可以将环境设置为 URL。

例如,在 L4 中,我在 start.php 文件中使用了它

$env = $app->detectEnvironment(function()
{
    return isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '';
});

这会为项目加载正确的环境,所以如果我们有一个本地域dev.laravel.com,它将加载来自dev.laravel.com的环境变量

我不能在 Laravel 5 中做到这一点。

你猜我怎么应用这个?

【问题讨论】:

标签: php laravel laravel-5


【解决方案1】:

例如,您可以这样做以使用不同的数据库,然后您在 .env 上有一些不同的变量,例如:

DB_HOST=localhost
DB_DATABASE=database1
DB_USERNAME=foo
DB_PASSWORD=foo

DB_HOST_2=localhost
DB_DATABASE_2=database2
DB_USERNAME_2=foo
DB_PASSWORD_2=foo

并在 config/dababase.php 中:

'connections' => [

        '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,
        ],

        'mysql2' => [
            'driver'    => 'mysql',
            'host'      => env('DB_HOST_2', 'localhost'),
            'database'  => env('DB_DATABASE_2', 'forge'),
            'username'  => env('DB_USERNAME_2', 'forge'),
            'password'  => env('DB_PASSWORD_2', ''),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ],

最后使用:

Config::set('database.default', "mysql") or Config::set('database.default', "mysql2")

根据您的需要。

例如,我使用在登录用户在控制器抽象类中更改数据库连接后更改数据库连接,根据会话变量更改值,即在登录后根据用户类型更改:

abstract class Controller extends BaseController {

    use DispatchesCommands, ValidatesRequests;

    public function __construct()
    {
        Config::set('database.default', Session::get('myapp.database','mysql'));
    }
}

登录后我把这个值改了:

Session::set('myapp.database', 'mysql2') or Session::set('myapp.database', 'mysql')

在下一次调用控制器时,数据库连接发生了变化。

【讨论】:

  • 我们可以对多个环境文件执行此操作吗?当我使用临时服务器时,我希望能够将环境推出,而无需在开始工作之前手动部署 .env 文件。
  • 您可以尝试实现例如配置参数来根据主机名或 url 选择配置。但是如果你有不同的服务器,你应该在每台服务器上使用 .env 及其配置。但是同一台服务器有不同的 url 你可以试试这个。
  • 试一试,效果惊人。谢谢。现在我不必为每台服务器部署配置了。
【解决方案2】:

您需要在每个环境中放置一个 .env 文件 - 并将这些环境的特定配置放入 .env 文件中

所以你可以放置一个单一的环境

APP_ENV=local
APP_DEBUG=true
DB_PASSWORD=secret

在另一个 .env 中,您可能会放置在不同的环境中

APP_ENV=staging
APP_DEBUG=false
DB_PASSWORD=other

【讨论】:

  • 不同环境是什么意思?我想根据生产或本地环境加载不同的 .env 文件。我该怎么做?
  • 所以在您的生产服务器中,您有一个 .env 文件 - 而在您的本地服务器上,您有一个不同的 .env 文件
猜你喜欢
  • 2016-10-22
  • 2015-01-01
  • 1970-01-01
  • 2015-06-13
  • 2021-08-27
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
相关资源
最近更新 更多