renanfenrich / laravel-tenant-subdomain
为多租户应用程序提供 Laravel 扩展包。
v1.0.6
2020-02-06 17:55 UTC
Requires
- illuminate/config: 6.*
- illuminate/routing: 6.*
This package is not auto-updated.
Last update: 2024-09-29 06:02:38 UTC
README
此包将协助使用 Laravel 在子域名中组织客户。
安装
将其添加到您的 composer.json
"require": { //.. "dlimars/laravel-tenant-subdomain": "^1.0" },
或在其终端中执行
composer require dlimars/laravel-tenant-subdomain
在 config/app.php
中添加提供者和外观
'providers' => [ // outros providers Dlimars\Tenant\Providers\TenantServiceProvider::class, ], 'aliases' => [ // outros aliases 'Tenant' => Dlimars\Tenant\Facades\Tenant::class, ]
在 app/Http/Kernel.php
中添加中间件
protected $routeMiddleware = [ // outros middlewares 'tenant.database' => \Dlimars\Tenant\Middlewares\TenantDatabase::class ];
之后,打开您的控制台并执行: php artisan vendor:publish
,修改 config/tenant.php
文件以满足您的需求,打开您的 .env
文件并添加
APP_HOST=domain.com
TENANT_SUBDOMAIN_ARGUMENT=_account_
使用方法
要生成子域名路由,请使用以下方式
// Tenant::getFullDomain() retorna algo como '{_account_}.domain.com' Route::group(['domain' => Tenant::getFullDomain()], function () { Route::get('subdomain-teste/{id}', ['as' => 'subdomain-teste', function($subdomain, $id){ return route('subdomain-teste', ['123']); }]); });
要为非子域名的应用程序主要(即非子域名)生成路由,请使用以下方式
// Tenant::getDomain() retorna algo como 'domain.com' Route::group(['domain' => Tenant::getDomain()], function () { Route::get('domain-teste/{id}', ['as' => 'domain-teste', function($id){ return route('domain-teste', ['123']); }]); }); // isso impede que rotas do dominio possam ser acessadas através do subdominio
根据子域名加载数据库配置
数据库配置文件将默认读取,位于 config/tenant
文件夹中,内容示例
return [ 'driver' => 'mysql', 'host' => 'host', 'database' => 'db_subdomain', 'username' => 'user_subdomain', 'password' => 'user_password', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, ];
文件将被读取并添加为默认连接 tenant
,这是通过中间件完成的,在所有将使用自己的数据库的路径上,使用中间件 tenant.database
Route::group(['domain' => Tenant::getFullDomain(), 'middleware' => ['tenant.database']], function () { Route::get('domain-teste/{id}', ['as' => 'domain-teste', function($id){ return route('domain-teste', ['123']); }]); });
假设用户访问 http://beltrano.domain.com
,要加载的配置应位于 /config/tenants/beltrano.php
(这是可配置的)
创建数据库配置
要创建新的数据库配置,请使用以下方式
$config = [ 'foo' => 'bar' ]; Tenant::makeDatabaseConfigFile('foo', $config);
这将生成一个位于 config/tenants
的文件,命名为 foo.php
(或根据配置命名/位置),内容如下
return [ 'foo' => 'bar' ];
删除数据库配置
要删除配置文件,只需执行以下操作
Tenant::dropDatabaseConfigFile('foo');