From e3513160144a8ba0aa81e3641f70927ed392d419 Mon Sep 17 00:00:00 2001 From: Hayatunnabi Nabil Date: Sat, 8 Nov 2025 21:24:45 +0600 Subject: [PATCH] fix: Enhance DomainTenantResolver to handle SingleDomainTenant correctly --- src/Resolvers/DomainTenantResolver.php | 15 +++++++++++++-- tests/SingleDomainTenantTest.php | 13 +++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/Resolvers/DomainTenantResolver.php b/src/Resolvers/DomainTenantResolver.php index 9535cdf2..360851df 100644 --- a/src/Resolvers/DomainTenantResolver.php +++ b/src/Resolvers/DomainTenantResolver.php @@ -69,9 +69,20 @@ class DomainTenantResolver extends Contracts\CachedTenantResolver protected static function setCurrentDomain(Tenant $tenant, string $domain): void { /** @var Tenant&Model $tenant */ - if (! $tenant instanceof SingleDomainTenant) { - static::$currentDomain = $tenant->domains->where('domain', $domain)->first(); + if ($tenant instanceof SingleDomainTenant) { + $domainModelClass = config('tenancy.models.domain'); + /** @var Domain&Model $domainModel */ + $domainModel = new $domainModelClass; + $domainModel->setAttribute('domain', $domain); + $domainModel->setAttribute(Tenancy::tenantKeyColumn(), $tenant->getTenantKey()); + $domainModel->setRelation('tenant', $tenant); + + static::$currentDomain = $domainModel; + + return; } + + static::$currentDomain = $tenant->domains->where('domain', $domain)->first(); } public function getPossibleCacheKeys(Tenant&Model $tenant): array diff --git a/tests/SingleDomainTenantTest.php b/tests/SingleDomainTenantTest.php index 49bd7d95..a91ae94a 100644 --- a/tests/SingleDomainTenantTest.php +++ b/tests/SingleDomainTenantTest.php @@ -4,6 +4,7 @@ declare(strict_types=1); use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Route; +use Stancl\Tenancy\Contracts\Domain; use Stancl\Tenancy\Tests\Etc\SingleDomainTenant; use Stancl\Tenancy\Resolvers\DomainTenantResolver; use Stancl\Tenancy\Middleware\InitializeTenancyByDomain; @@ -132,3 +133,15 @@ test('single domain tenant can be identified by domain or subdomain', function ( [PreventAccessFromUnwantedDomains::class, InitializeTenancyBySubdomain::class], // Identification middleware ], ]); + +test('domain contract can be injected for single domain tenants', function () { + SingleDomainTenant::create(['domain' => 'acme.single.test']); + + Route::get('/domain-check', function (Domain $domain) { + return $domain?->domain ?? 'missing'; + })->middleware([InitializeTenancyByDomain::class]); + + pest() + ->get('http://acme.single.test/domain-check') + ->assertSee('acme.single.test'); +});