РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗ppflSpBlCk 181 of 250 menu
◀ ▶

Проверка подписки в Filament

Давайте проверим подписку. Страница оплаты уже есть у провайдера. Теперь зададим правило: без оплаты команда не работает в /admin/acme, а попадает на billing.

ManualBillingProvider.php сообщает Filament имя middleware через метод getSubscribedMiddleware. Проверку вынесем в отдельный класс:

<?php namespace App\Billing; use App\Filament\Pages\Billing; use App\Http\Middleware\EnsureTeamIsSubscribed; use Filament\Billing\Providers\Contracts\BillingProvider; class ManualBillingProvider implements BillingProvider { public function getRouteAction(): string { return Billing::class; } public function getSubscribedMiddleware(): string { return EnsureTeamIsSubscribed::class; } } ?>

Middleware читает текущую команду и смотрит метод subscribed на модели. Без подписки идём на billing, иначе пропускаем дальше:

<?php namespace App\Http\Middleware; use Closure; use Filament\Facades\Filament; use Illuminate\Http\Request; class EnsureTeamIsSubscribed { public function handle(Request $request, Closure $next) { $team = Filament::getTenant(); if ($team && ! $team->subscribed()) { return redirect()->route( Filament::getCurrentPanel()->generateRouteName('tenant.billing'), ['tenant' => $team], ); } return $next($request); } } ?>

В панели включим requiresTenantSubscription, чтобы middleware работал на каждом запросе команды.

<?php namespace App\Providers\Filament; use App\Billing\ManualBillingProvider; use App\Models\Team; use Filament\Panel; use Filament\PanelProvider; class AdminPanelProvider extends PanelProvider { public function panel(Panel $panel): Panel { return $panel ->default() ->id('admin') ->path('admin') ->login() ->tenant(Team::class) ->tenantBillingProvider(new ManualBillingProvider()) ->requiresTenantSubscription(); } } ?>

Проверьте оплату сами и отправляйте неоплаченную команду на страницу оплаты.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить