我在我的多租户应用程序中使用了 Spatie/Multitenancy。当我访问房东域名时,出现错误:
Illuminate\Contracts\Container\BindingResolutionException
Target class [currentTenant] does not exist.
我发现这个错误是由于设置请求会话导致的
app($this->currentTenantContainerKey())->id
。
代码如下:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Spatie\Multitenancy\Concerns\UsesMultitenancyConfig;
use Symfony\Component\HttpFoundation\Response;
class CustomEnsureValidTenantSession
{
use UsesMultitenancyConfig;
public function handle($request, Closure $next)
{
$sessionKey = 'ensure_valid_tenant_session_tenant_id';
if (! $request->session()->has($sessionKey)) {
// dd($request->session()->get($sessionKey));
$request->session()->put($sessionKey, app($this->currentTenantContainerKey())->id);
return $next($request);
}
if ($request->session()->get($sessionKey) !== app($this->currentTenantContainerKey())->id) {
return $this->handleInvalidTenantSession($request);
}
return $next($request);
}
protected function handleInvalidTenantSession($request)
{
abort(Response::HTTP_UNAUTHORIZED);
}
}
我可以设置值来为房东请求会话吗?
判断Tenant是否发起的解决方案是这样的:
$containerKey = config('multitenancy.current_tenant_container_key');
if (! app()->has($containerKey)) {
// you are in Tenant mode (Tenant has found)
} else {
// you are in Landlord mode (No Tenant has been found)
}