Я создал вторую панель в своем проекте Filament и назвал ее «Веб-сайты». Я сделал так, чтобы каждого пользователя можно было назначить нескольким веб-сайтам с помощью сводной таблицы. Я также потребовал, чтобы пользователь вошел в панель, где пользователь, который войдет в систему, будет перенаправлен на первый назначенный веб-сайт.
Однако, если вход в систему будет успешным, я попаду на правильный путь (например, /website/mywebsite), но я все равно получаю ошибку 404 не найден. Я использую Laravel 11, вот фрагменты кода
Я создал вторую панель в своем проекте Filament и назвал ее «Веб-сайты». Я сделал так, чтобы каждого пользователя можно было назначить нескольким веб-сайтам с помощью сводной таблицы. Я также потребовал, чтобы пользователь вошел в панель, где пользователь, который войдет в систему, будет перенаправлен на первый назначенный веб-сайт. Однако, если вход в систему будет успешным, я попаду на правильный путь (например, /website/mywebsite), но я все равно получаю ошибку 404 не найден. Я использую Laravel 11, вот фрагменты кода [code] class WebsitePanelProvider extends PanelProvider { public function panel(Panel $panel): Panel { return $panel ->id('website') ->path('website') ->colors([ 'primary' => Color::Green, ]) ->discoverResources(in: app_path('Filament/Website/Resources'), for: 'App\\Filament\\Website\\Resources') ->discoverPages(in: app_path('Filament/Website/Pages'), for: 'App\\Filament\\Website\\Pages') ->pages([ Pages\Dashboard::class, ]) ->discoverWidgets(in: app_path('Filament/Website/Widgets'), for: 'App\\Filament\\Website\\Widgets') ->widgets([ Widgets\AccountWidget::class, ]) ->middleware([ EncryptCookies::class, AddQueuedCookiesToResponse::class, StartSession::class, AuthenticateSession::class, ShareErrorsFromSession::class, VerifyCsrfToken::class, SubstituteBindings::class, DisableBladeIconComponents::class, DispatchServingFilamentEvent::class, ]) ->authMiddleware([ Authenticate::class, ]) ->tenant(Website::class, 'slug') ->login() ->databaseNotifications() ->databaseNotificationsPolling('10s'); } [/code] пользователь: [code] class User extends Authenticatable implements FilamentUser { /** @use HasFactory */ use HasFactory, Notifiable, HasRoles;
/** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', 'phone' ];
/** * The attributes that should be hidden for serialization. * * @var array */ protected $hidden = [ 'password', 'remember_token', ];
/** * Get the attributes that should be cast. * * @return array */ protected function casts(): array { return [ 'email_verified_at' => 'datetime', 'password' => 'hashed', ]; }
public function websites(): BelongsToMany { return $this->belongsToMany(Website::class); }
public function getTenants(Panel $panel): array|Collection { return $this->websites; }
public function canAccessPanel(Panel $panel): bool { return match($panel->getId()) { 'admin' => $this->hasRole(ControlPanelRole::cases()), 'website' => $this->websites()->count() && $this->hasRole(WebsiteRole::cases()), }; }
public function canAccessTenant(Model $tenant): bool { return $this->websites()->where('website.id', $tenant->id)->exists(); }
public function canAccessFilament(): bool { return true; /* return str_ends_with($this->email, '@mydom.com') && $this->hasVerifiedEmail(); */ }