Laravel 5更改环境以匹配URL

时间:2015-02-05 11:46:44

标签: php laravel laravel-5

我已经安装了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中这样做。

任何猜测我如何应用这个?

2 个答案:

答案 0 :(得分:0)

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

所以你可以放一个环境

APP_ENV=local
APP_DEBUG=true
DB_PASSWORD=secret

和另一个.env在另一个环境中你可以放

APP_ENV=staging
APP_DEBUG=false
DB_PASSWORD=other

答案 1 :(得分:0)

例如,您可以使用不同的数据库,然后在.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")

根据您的需要。

例如,我在登录用户在控制器抽象类中执行此操作时更改数据库连接,更改取决于会话var的值,根据用户类型在登录后更改:

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')

并在下次调用控制器时更改数据库连接。