乘数 / laravel-tenant-subdomain
此包旨在简化基于应用子域的路由创建和数据库切换
v1.0.8
2020-04-14 14:28 UTC
Requires
- illuminate/config: 7.*
- illuminate/routing: 7.*
This package is auto-updated.
Last update: 2024-09-15 00:21:00 UTC
README
此包将帮助您使用Laravel在子域中组织客户。
安装
在终端执行以下操作
composer require multiplier/laravel-tenant-subdomain
将提供者和外观添加到config/app.php
'providers' => [ // outros providers Multiplier\Tenant\Providers\TenantServiceProvider::class, ], 'aliases' => [ // outros aliases 'Tenant' => Multiplier\Tenant\Facades\Tenant::class, ]
将中间件添加到app/Http/Kernel.php
protected $routeMiddleware = [ // outros middlewares 'tenant.database' => \Multiplier\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');