首页 > 解决方案 > 在任何请求 Laravel 之前切换连接

问题描述

我倾向于在任何请求之前切换数据库连接,有什么建议吗?

我使用域路由组:

Route::group(['domain' => 'example.com'], function () {


    Route::get('/', function () {
        return view('welcome');
    });
    ... and other routes

});

但是我想在按域的任何路由组之后打开数据库连接,并使用一个控制器来控制所有域,但有多个数据库。知道该怎么做吗?我知道我可以像这样在控制器中切换连接:

$connection = config('database.connections.mysql');
$conn = DB::connection($connection);
$model = $conn->table('models');
$models = $model->get();

例如。但在对应用程序提出任何请求之前,我想要它。

标签: phpmysqldatabaselaravel

解决方案


我认为 Laravel 中间件可以在这里发挥作用。请参阅此处的文档:https ://laravel.com/docs/5.6/middleware

中间件简介:

中间件提供了一种方便的机制来过滤进入应用程序的 HTTP 请求。例如,Laravel 包含一个中间件,用于验证您的应用程序的用户是否经过身份验证。如果用户未通过身份验证,中间件会将用户重定向到登录屏幕。但是,如果用户通过了身份验证,中间件将允许请求进一步进入应用程序。

当然,除了身份验证之外,还可以编写额外的中间件来执行各种任务。CORS 中间件可能负责将正确的标头添加到离开您的应用程序的所有响应中。日志中间件可能会将所有传入请求记录到您的应用程序。

您可以将查询同一数据库的所有路由放在同一中间件中并相应地切换数据库。之前的中间件将非常适合这种情况。

中间件之前和之后:

中间件是在请求之前还是之后运行取决于中间件本身。例如,以下中间件将在应用程序处理请求之前执行一些任务。


推荐阅读