Laravel Tenant SubdomĆnio
, (*1)
Este pacote irĆ” auxiliar na organização de clientes em subdomĆnios usando Laravel., (*2)
Instalação
Adicione no seu composer.json, (*3)
"require": {
//..
"dlimars/laravel-tenant-subdomain": "^1.0"
},
ou execute em seu terminal, (*4)
composer require dlimars/laravel-tenant-subdomain
adicione o provider e o facade em config/app.php:, (*5)
'providers' => [
// outros providers
Dlimars\Tenant\Providers\TenantServiceProvider::class,
],
'aliases' => [
// outros aliases
'Tenant' => Dlimars\Tenant\Facades\Tenant::class,
]
adicione o middleware em app/Http/Kernel.php, (*6)
protected $routeMiddleware = [
// outros middlewares
'tenant.database' => \Dlimars\Tenant\Middlewares\TenantDatabase::class
];
Após isso, abra seu console e execute: php artisan vendor:publish, modifique o arquivo config/tenant.php para sua necessidade, abra seu arquivo .env e adicione:, (*7)
APP_HOST=domain.com
TENANT_SUBDOMAIN_ARGUMENT=_account_
Uso
para gerar rotas de subdominio, utilize da seguinte forma:, (*8)
// 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']);
}]);
});
para gerar rotas para a aplicação principal (que não seja subdominio), utilize da seguinte forma, (*9)
// 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
os arquivos de configurações de banco serão lidos por padrão, dentro da pasta config/tenant, com o exemplo de conteudo:, (*10)
return [
'driver' => 'mysql',
'host' => 'host',
'database' => 'db_subdomain',
'username' => 'user_subdomain',
'password' => 'user_password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
];
o arquivo é lido e adicionado como conexão padrão tenant, isso é feito via Middleware, em todas as rotas que irão utilizar base de dados própria, use o middleware tenant.database:, (*11)
Route::group(['domain' => Tenant::getFullDomain(), 'middleware' => ['tenant.database']], function () {
Route::get('domain-teste/{id}', ['as' => 'domain-teste', function($id){
return route('domain-teste', ['123']);
}]);
});
Supondo que o usuÔrio acesse http://beltrano.domain.com, a configuração a ser carregada deverÔ estar em /config/tenants/beltrano.php (isso é configurÔvel), (*12)
Criar configuraƧƵes de banco
Para criar uma nova configuração de banco, use da seguinte forma:, (*13)
$config = [
'foo' => 'bar'
];
Tenant::makeDatabaseConfigFile('foo', $config);
isso irÔ gerar um arquivo dentro de config/tenants com o nome de foo.php (ou como/onde for definido na configuração), com o seguinte conteúdo, (*14)
return [
'foo' => 'bar'
];
Excluir configuraƧƵes de banco
Para excluir um arquivo de configuração, apenas execute da seguinte maneira:, (*15)
Tenant::dropDatabaseConfigFile('foo');