Ошибка 404 не найдено в пользовательской панели Laravel Filament

Вопрос или проблема

Я создал вторую панель в своем проекте и назвал ее “сайты”. Я сделал так, чтобы каждому пользователю можно было присвоить несколько сайтов с помощью промежуточной таблицы, и, наконец, настроил панель сайта так, чтобы для доступа требовалась авторизация, при этом пользователь, который входит в систему, перенаправляется на первый назначенный сайт. Однако вход в систему проходит успешно, и меня перенаправляет на правильный путь сайта (например: /website/mywebsite), но я получаю ошибку 404 NOT FOUND (я использую laravel 11, кстати). Вот несколько фрагментов кода:

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');
}

пользователь:

class User extends Authenticatable implements FilamentUser {
/** @use HasFactory<\Database\Factories\UserFactory> */
use HasFactory, Notifiable, HasRoles;

/**
 * Атрибуты, которые можно массово присвоить.
 *
 * @var array<int, string>
 */
protected $fillable = [
    'name',
    'email',
    'password',
    'phone'
];

/**
 * Атрибуты, которые должны быть скрыты для сериализации.
 *
 * @var array<int, string>
 */
protected $hidden = [
    'password',
    'remember_token',
];

/**
 * Получить атрибуты, которые должны быть преобразованы.
 *
 * @return array<string, string>
 */
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(); */
}

404 NOT FOUND

Ответ или решение

Ошибка 404 Not Found в панели Laravel Filament: Устранение неполадок

Когда вы работаете с Laravel Filament и сталкиваетесь с ошибкой 404 Not Found, это может быть признаком нескольких проблем. Давайте рассмотрим основные аспекты, которые могут быть связаны с вашей реализацией панели websites.

1. Проверка маршрутов

Первое, что нужно сделать, это проверить, зарегистрированы ли ваши маршруты правильно. Убедитесь, что маршруты для панели websites действительно создаются и доступны. Вы можете использовать команду php artisan route:list, чтобы просмотреть все маршруты приложения. Если маршрута с website/{slug} нет в списке, это означает, что он не настроен правильно.

2. Обработка путей в панели

В вашем коде вы используете метод path('website'). Убедитесь, что вы правильно указываете путь для каждой из ваших страниц и ресурсов. Например, ваш метод для получения страниц может выглядеть так:

$panel->discoverPages(in: app_path('Filament/Website/Pages'), for: 'App\\Filament\\Website\\Pages');

Проверьте, совпадают ли пути к страницам с теми, которые вы пытаетесь посетить. Если вы ожидаете получить доступ к странице /website/mywebsite, убедитесь, что у вас действительно есть соответствующий маршрут.

3. Проверка токена авторизации

Вы используете аутентификацию с помощью метода authMiddleware([Authenticate::class]). Убедитесь, что у вас есть правильная авторизация и ваш пользователь имеет доступ к панели website. Для этого проверьте, правильно ли установлен canAccessPanel() и canAccessTenant(), чтобы убедиться, что соответствующий пользователь действительно имеет доступ к текущему сайту.

4. Взаимодействие с базой данных

Также важно проверить, что соответствующий сайт, на который вы переходите (например, mywebsite), действительно существует в базе данных и пользователь имеет к нему доступ через ваш BelongsToMany метод. Используйте такие команды, как dd($this->websites) в методе canAccessTenant() для вывода доступных сайтов.

5. Маршрутные параметры и контроллеры

Если ваш маршрут подразумевает наличие параметра slug, убедитесь, что контроллер или функция, которая обрабатывает этот маршрут, действительно выполняется. Проверяйте, обрабатываете ли вы этот параметр в параметрах метода, который у вас настроен для обработки страниц.

6. Проверка шаблонов

Убедитесь, что все необходимые шаблоны Blade существуют и правильно настроены. Иногда ошибка 404 может возникнуть, если не удается найти представление, использующееся для отображения страницы, к которой вы пытаетесь получить доступ.

Итог

Чтобы решить проблему с ошибкой 404 в вашей панели Laravel Filament, выполните следующие шаги:

  1. Проверьте наличие маршрутов и правильность их регистрации.
  2. Убедитесь в корректности указанных путей к страницам и ресурсам.
  3. Убедитесь, что у пользователя достаточно прав для доступа к панели.
  4. Проверяйте наличие объектов в базе данных, с которыми работает ваша логика.
  5. Убедитесь, что все соответствующие шаблоны Blade существуют.

Следуя этим рекомендациям, вы сможете диагностировать и устранить проблему с ошибкой 404 в вашем проекте Laravel Filament. Если после всех этих шагов проблема остается, рассмотрите возможность обращения за помощью к сообществу Laravel или на соответствующие форумы, предоставив им все необходимые детали и код.

Оцените материал
Добавить комментарий

Капча загружается...