php - 在任何请求 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();
例如。但在对应用程序提出任何请求之前,我想要它。
解决方案
我认为 Laravel 中间件可以在这里发挥作用。请参阅此处的文档:https ://laravel.com/docs/5.6/middleware
中间件简介:
中间件提供了一种方便的机制来过滤进入应用程序的 HTTP 请求。例如,Laravel 包含一个中间件,用于验证您的应用程序的用户是否经过身份验证。如果用户未通过身份验证,中间件会将用户重定向到登录屏幕。但是,如果用户通过了身份验证,中间件将允许请求进一步进入应用程序。
当然,除了身份验证之外,还可以编写额外的中间件来执行各种任务。CORS 中间件可能负责将正确的标头添加到离开您的应用程序的所有响应中。日志中间件可能会将所有传入请求记录到您的应用程序。
您可以将查询同一数据库的所有路由放在同一中间件中并相应地切换数据库。之前的中间件将非常适合这种情况。
中间件之前和之后:
中间件是在请求之前还是之后运行取决于中间件本身。例如,以下中间件将在应用程序处理请求之前执行一些任务。
推荐阅读
- google-bigquery - 联合表/查询不起作用 - “无法在位置读取:us-west1”
- python - 如何将dataFrame中的数据加载到mssql表中
- javascript - 遍历列表并进行顺序网络调用
- excel - 如果满足条件,则将公式转换为值
- java - 如何显示从休息服务返回的响应消息?
- pandas - 如何从 Pandas DataFrame 中的行中提取单词
- postgresql - Sqlx 使用准备好的语句获取
- python - 如何通过递归从列表中删除某些内容?Python
- android - 在 Ionic 中实现多选功能(长按/按住并选择)
- javascript - html 和 php 文件返回为空