Multi-Tenancy no Laravel
O Laravel é um framework PHP altamente popular usado para desenvolvimento de aplicações web. Ele oferece uma série de recursos e ferramentas para ajudar a criar aplicações de alta qualidade de forma rápida e eficiente. Em muitos casos, as aplicações Laravel precisam ser desenvolvidas com suporte a vários locatários ou “tenants”, onde cada tenancy tem seu próprio espaço isolado e separado dentro da aplicação. Neste artigo, vamos mostrar como colocar suporte a tenants em uma aplicação Laravel 9.
Passo 1: Configuração do Banco de Dados
A primeira coisa que precisamos fazer é configurar o banco de dados para suportar tenants. Para isso, precisamos criar uma tabela separada para armazenar informações sobre os tenants. Esta tabela conterá informações como o nome do tenant, a URL, o endereço de e-mail e outras informações relevantes.
Para criar esta tabela, você pode usar o seguinte comando:
php artisan make:migration create_tenants_table
Em seguida, você precisa editar o arquivo de migração criado para incluir as colunas necessárias para a tabela de tenants. Aqui está um exemplo de como o arquivo de migração poderia parecer:
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTenantsTable extends Migration
{
public function up()
{
Schema::create('tenants', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('domain')->unique();
$table->string('email');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('tenants');
}
}
Em seguida, execute o comando abaixo para aplicar as mudanças no banco de dados:
php artisan migrate
Passo 2: Criação de um Model de Tenant
Em seguida, precisamos criar um model Laravel para representar a tabela de tenants. Este model será usado para recuperar e armazenar informações sobre os tenants. Para criar o model, você pode usar o seguinte comando:
php artisan make:model Tenant
Em seguida, você pode editar o arquivo de model
para incluir as propriedades relevantes para a tabela de tenants. Aqui está um exemplo de como o arquivo de model poderia parecer:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Tenant extends Model
{
protected $fillable = [
'name', 'domain', 'email'
];
}
Passo 3: Configuração de Multi-Tenancy
Agora precisamos configurar a aplicação Laravel para suportar tenants. Para fazer isso, precisamos criar um middleware que verifique o domínio da URL e selecione o tenant correto. Para criar o middleware, você pode usar o seguinte comando:
php artisan make:middleware TenantMiddleware
Em seguida, você pode editar o arquivo de middleware para incluir a lógica necessária para selecionar o tenant correto. Aqui está um exemplo de como o arquivo de middleware poderia parecer:
namespace App\Http\Middleware;
use App\Tenant;
use Closure;
use Illuminate\Support\Facades\Config;
class TenantMiddleware
{
public function handle($request, Closure $next)
{
$tenant = Tenant::where('domain', $request->getHost())->first();
if ($tenant) {
Config::set('database.connections.tenant.database', $tenant->name);
}
return $next($request);
}
}
Em seguida, precisamos registrar o middleware na aplicação. Para fazer isso, você pode adicionar o seguinte código no arquivo app/Http/Kernel.php
:
protected $middlewareGroups = [
'web' => [
// ...
\App\Http\Middleware\TenantMiddleware::class,
],
];
Passo 4: Configuração do Banco de Dados por Tenant
Por fim, precisamos configurar o Laravel para usar a conexão correta com o banco de dados para cada tenant. Para fazer isso, você pode adicionar a seguinte seção no arquivo de configuração config/database.php
:
'connections' => [
// ...
'tenant' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => null,
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
// ...
],
Em resumo, o processo para colocar tenant de domínio em uma aplicação desenvolvida no framework Laravel 9 envolve criar um modelo de tenant, um middleware para selecionar o tenant correto, configurar a aplicação para suportar multi-tenancy e configurar o Laravel para usar a conexão correta com o banco de dados para cada tenant. Com estas etapas, você pode facilmente adicionar suporte multi-tenancy a sua aplicação Laravel.
Lembre-se de sempre testar a aplicação após fazer alterações para garantir que ela esteja funcionando corretamente. Além disso, é importante ter em mente que este é apenas um exemplo de como você pode implementar multi-tenancy em sua aplicação Laravel. É possível que você precise fazer algumas modificações para atender às suas necessidades específicas.