ringierimu / multi-tenant
此包已被放弃,不再维护。未建议替代包。
Laravel 多租户包
dev-master
2019-05-03 14:22 UTC
Requires
- php: >=7.1.3
- illuminate/support: ^5.6 || ^5.7 || ^5.8
Requires (Dev)
- orchestra/testbench: ^3.5
- phpunit/phpunit: ^6.0 || ^7.0
This package is not auto-updated.
Last update: 2024-02-18 16:54:25 UTC
README
多租户 指的是一种软件架构,其中单个软件实例在服务器上运行并服务于多个租户。租户是一组共享特定访问权限的用户,对软件实例有特定的权限。在多租户架构中,软件应用程序被设计为为每个租户提供实例的专用份额,包括其数据、配置、用户管理、租户个别功能和非功能属性。
安装
$ composer require ringierimu/multi-tenant
运行迁移
$ php artisan migrate
配置
- 打开位于您的 Http 目录内的
kernel.php
文件,并将Ringierimu\MultiTenant\Http\Middleware\TenantMiddleware\TenantMiddleware::class
添加到全局 http 中间件$middleware
。
/** * The application's global HTTP middleware stack. * * These middleware are run during every request to your application. * * @var array */ protected $middleware = [ ... TenantMiddleware::class ];
- 将
TenantDependableTrait
添加到您的模型类以支持工作流程
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Ringierimu\MultiTenant\Traits\TenantDependableTrait; /** * Class Post * @package App */ class Post extends Model { use TenantDependableTrait; }
- 为
domains
表创建填充数据的 Seeder 并运行 Seeder。
例如。
<?php use Illuminate\Support\Facades\DB; DB::table('domains')->insert([ 'title' => 'Ringier', 'host' => 'ringier.test', 'alieses' => 'rg', 'country_id' => 1 ]);
功能
租户解析器
TenantMiddleware::class
通过 HTTP 请求解析租户。它使用请求域名查询domains
表。- 要获取解析后的租户实例,您可以使用依赖注入注入
TenantManager
类或使用 Laravel 依赖注入容器返回TenantManager
类的现有实例。
<?php $tenantManager = app(Ringierimu\MultiTenant\TenantManager::class); echo $tenantManager->getDomain();
<?php use Ringierimu\MultiTenant\TenantManager; public function login(TenantManager $tenantManager) { echo $tenantManager->getDomain(); }
租户应用配置
- 要为每个租户添加自定义配置,请在 Laravel 默认配置目录中添加
tenants
目录,以租户的aliases
键作为子目录。例如,config/tenants/rg/app.php
。
注意:aliases
键必须与domains
表上设置的租户别名键相同。 - 在租户目录中找到的任何配置键将覆盖 Laravel 默认配置中的任何现有键。