takeshiyu / tenantify
Tenantify 是一个 Laravel 扩展包,旨在使实现多租户架构变得简单高效。使用 Tenantify,您可以快速设置应用程序以支持多个租户,每个租户使用单个数据库,并通过唯一的子域名进行识别。
v1.0.2
2023-04-23 10:30 UTC
Requires
- php: ^8.1.0|^8.2.0
- illuminate/support: ^9.0|^10.0
Requires (Dev)
- laravel/pint: ^1.9
- mockery/mockery: ^1.5
- orchestra/testbench: ^8.5
- pestphp/pest: ^2.5
- pestphp/pest-plugin-laravel: ^2.0
Conflicts
- phpunit/phpunit: <10.1.0
README
Tenantify 是一个 Laravel 扩展包,旨在使实现轻量级多租户架构变得简单高效。使用 Tenantify,您可以快速设置应用程序以支持多个租户,每个租户使用 单个数据库,并通过 唯一子域名 进行识别。
功能
- 自动子域名检测和租户解析
- 基于子域名的路由,使用 Laravel 路由宏
- 租户感知查询作用域
- 租户上下文和数据隔离的中间件
安装
要安装 Tenantify,请按照以下简单步骤操作
- 通过 Composer 安装包
composer require takeshiyu/tenantify
- 发布配置文件和模型
php artisan vendor:publish --provider="TakeshiYu\Tenantify\TenantifyServiceProvider"
配置
安装 Tenantify 后,您可以根据应用程序的需求进行配置。打开 config/tenantify.php
文件并根据需要进行调整
return [ 'tenant_domain' => 'tenantify.test', 'tenant_model' => App\Models\Tenant::class, 'tenant_column' => 'slug', 'tenant_key' => 'tenant_id', ];
自定义模型
默认情况下,Tenantify 使用 App\Models\Tenant
(在 config/tenantify.php
中配置)作为租户模型,但您可以根据应用程序的需求调整默认模型。请确保在您的模型中使用 TakeshiYu\Tenantify\Concerns\Tenantable
特性。
use TakeshiYu\Tenantify\Concerns\Tenantable; class YourTenantModel extends Model { use Tenantable; }
查询作用域
为了正确作用查询,请在您的模型上应用 TakeshiYu\Tenantify\Concerns\HasTenancy
特性
use TakeshiYu\Tenantify\Concerns\HasTenancy; class YourModel extends Model { use HasTenancy; }
使用
在 routes/web.php
文件中,使用 tenancy
宏定义您的租户特定路由
Route::tenancy(function () { // your tenant routes here ... });
或将 TakeshiYu\Tenantify\Middleware\ResolveTenant
中间件分配给您的路由或组
Route::get('/', fn () => 'ok')->middleware('tenantify.resolve');
当前租户
有几种方法可以处理当前租户
use TakeshiYu\Tenantify\Tenancy; Tenancy::tenant(); // returns current tenant instance Tenancy::id(); // returns current tenant id Tenancy::slug(); // returns current tenant slug
如果没有找到租户,它将抛出 TenancyNotInitializedException
异常。
测试
您可以运行包的测试
composer test
许可证
Tenantify 是开源软件,使用 MIT 许可证 许可。