<?php
namespace App\Services;
use App\Entity\Main\Tenant;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\HttpFoundation\RequestStack;
class SwitchTenantManager
{
private $event;
private $request;
public function __construct(ManagerRegistry $event, RequestStack $request)
{
$this->request = $request;
$this->event = $event;
$this->defaultManager = $this->event->getManager();
}
public function reconnect()
{
$server = $this->request->getCurrentRequest()->server->get('HTTP_HOST');
$item = explode(".", $server);
try {
$subDomain = $item[0];
} catch (\Exception $e) {
echo $e->getMessage() . 'The subdomain parameters is required in the URL';
}
// Testing tenant
try {
$tenantData = $this->defaultManager->getRepository(Tenant::class)->findOneBy([
'subDomain' => $subDomain
]);
} catch (\Exception $e) {
echo $e->getMessage() . 'The tenant for this ID not found';
}
$connection = $this->event->getConnection('tenant');
if (!is_null($tenantData)) {
$connection->changeParams($tenantData->getDbName(), $tenantData->getDbUser(), $tenantData->getDbPassword());
$connection->reconnect();
}
}
}