Laravel 5 改变环境以匹配 URL
Laravel 5 Changing Environment to match URL
我安装了 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 内执行此操作。
猜猜我该如何应用它?
您需要在每个环境中放置一个 .env
文件 - 并将这些环境的特定配置放入 .env
文件
所以你可以放一个环境
APP_ENV=local
APP_DEBUG=true
DB_PASSWORD=secret
在另一个 .env
不同的环境中,您可以将
APP_ENV=staging
APP_DEBUG=false
DB_PASSWORD=other
例如,您可以使用不同的数据库,然后在 .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")
取决于你的需要。
例如,我使用在登录用户后更改数据库连接,在控制器摘要中执行此操作 class 根据会话变量更改值,该值在登录后根据用户类型更改:
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')
并在下一次调用控制器时更改数据库连接。
我安装了 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 内执行此操作。
猜猜我该如何应用它?
您需要在每个环境中放置一个 .env
文件 - 并将这些环境的特定配置放入 .env
文件
所以你可以放一个环境
APP_ENV=local
APP_DEBUG=true
DB_PASSWORD=secret
在另一个 .env
不同的环境中,您可以将
APP_ENV=staging
APP_DEBUG=false
DB_PASSWORD=other
例如,您可以使用不同的数据库,然后在 .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")
取决于你的需要。
例如,我使用在登录用户后更改数据库连接,在控制器摘要中执行此操作 class 根据会话变量更改值,该值在登录后根据用户类型更改:
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')
并在下一次调用控制器时更改数据库连接。