实现此目的的最佳方法是在应用到路由组的前置过滤器中。
Route::group(['domain' => '{account}.myapp.com', 'before' => 'database.setup'], function()
{
// Your routes...
}
this before filters 获取一个$route
参数并$request
给它一个参数,所以我们可以使用它$request
来获取主机。
Route::filter('database.setup', function($route, $request)
{
$account = $request->getHost();
}
然后,您可以使用该帐户来调整Config::set
过滤器中使用的默认数据库连接。也许您需要首先使用默认连接来获取用户数据库详细信息。
$details = DB::details()->where('account', '=', $account)->first();
// Make sure you got some database details.
Config::set('database.connections.account', ['driver' => 'mysql', 'host' => $details->host, 'database' => $details->database, 'username' => $details->username, 'password' => $details->password]);
Config::set('database.connections.default', 'account');
在运行时创建一个新的数据库连接,然后将默认连接设置为新创建的连接。当然,您可以保留默认设置,只需将所有模型上的连接设置为account
.
这应该会给你一些想法。请注意,此代码均未经过测试。
此外,控制器上的每个方法都将接收域作为第一个参数。因此,如果您期望其他参数,请务必进行调整。