在Laravel中动态设置数据库连接和语言


Set database connection and language dynamically in Laravel

我有三个域指向同一个Laravel应用程序。我想要的是每一个都连接到自己的数据库,并基于TLD加载自己的语言文件。我可以在哪个文件中设置这些设置?我可以直接在配置文件中进行,也可以在加载配置之前的某个事件中进行。

我有一个简短的函数,它将解析域并获得TLD,在此基础上,经过快速验证,我们将知道将使用什么数据库和语言。

使用中间件可以轻松做到这一点-请参阅此处的一些文档:https://laravel.com/docs/master/middleware

您需要一个在执行控制器之前为所有请求运行的中间件。该中间件应该根据域配置应用程序区域设置和使用的连接,然后执行请求。类似于以下逻辑的东西应该会起作用:

public function handle($request, Closure $next)
{
  $host = $request->getHost();
  //do your logic that determines the language and connection to use based on TLD
  $language = $this->getLanguageForTld($host);
  //set connection used
  Config::set('database.default', $language);
  //set application locale
  App::setLocale($language);
  return $next($request);
}