Zum Hauptinhalt springen

Admin-Panel Entwickler-Dokumentation

Diese Dokumentation richtet sich an Entwickler, die das Filament Admin-Panel erweitern oder warten.

Benutzerhandbuch

Für die Bedienung des Admin-Panels siehe das Benutzerhandbuch.

Architektur

Das Admin-Panel basiert auf Filament v3.3 und ist vollständig auf Deutsch lokalisiert.

Konfiguration

Die Panel-Konfiguration erfolgt in AdminPanelProvider.php:

EigenschaftWert
Panel-IDadmin
URL-Pfad/admin
Primary ColorColor::Amber
Default Localede

Installierte Plugins

PluginPackageBeschreibung
EnvironmentIndicatorPluginpxlrbt/filament-environment-indicatorZeigt aktuelle Umgebung (dev/staging/prod)
ActivitylogPluginrmsramos/activitylogAktivitätsprotokoll für Änderungen
LanguageSwitchPluginbezhansalleh/filament-language-switchSprachumschaltung
GoogleMapsPlugincheesegrits/filament-google-mapsGoogle Maps Integration
DateRangePickerPluginmalzariey/filament-daterangepicker-filterDatumsbereich-Filter

Die Navigation ist nach funktionalen Gruppen organisiert:

GruppeResources/PagesSort
-Dashboard-2
-Reports2
BenutzerverwaltungUsers1
AuftragsverwaltungOrders, OrderRequests, OrderRatings1, 3, 15
KommunikationNotifications, NotificationTemplates, EmailTemplates10, 11, 12
SystemCategories, TariffRates, SystemLanguages, LegalDocuments, Settings, Exports2, 20, 21, 22, 99, 99

Einige Resources zeigen dynamische Badges:

ResourceBadgeFarbe
OrderRequestResourceAnzahl offener AnfragenWarning
NotificationResourceUngelesene Anzahl-
NotificationTemplateResourceInaktive AnzahlWarning
SystemLanguageResourceGesamtanzahlPrimary
LegalDocumentResourceAktive AnzahlPrimary

Lokalisierung

Alle Labels verwenden __('filament.*') Translation Keys. Die deutschen Übersetzungen befinden sich in:

  • lang/de/filament.php
  • lang/de/filament-panels.php
  • lang/de/filament-actions.php
  • lang/de/filament-tables.php
  • lang/de/filament-forms.php

Verzeichnisstruktur

apps/api/app/Filament/
├── Pages/
│ ├── Dashboard.php
│ ├── Reports.php
│ ├── ManageSettings.php
│ └── CategoryTree.php
├── Resources/
│ ├── UserResource.php
│ ├── UserResource/
│ │ ├── Pages/
│ │ └── RelationManagers/
│ ├── OrderResource.php
│ ├── OrderResource/
│ │ ├── Pages/
│ │ └── RelationManagers/
│ └── ...
└── Widgets/
├── DateRangeFilter.php
├── OrdersOverviewWidget.php
├── NewRegistrationRequestsWidget.php
├── RecentReviewsWidget.php
└── Reports/
├── KeyMetricsWidget.php
├── CategoryDistributionWidget.php
└── ...

Patterns & Best Practices

State-basierte Sichtbarkeit

Forms und Actions passen sich dynamisch an den Zustand an:

// Sichtbarkeit basierend auf Model-State
Action::make('assign')
->visible(fn (Order $record) => $record->state instanceof Open)

// Sichtbarkeit basierend auf Form-Input
Forms\Components\Section::make('Organisation')
->visible(fn (Get $get) => $get('role') === 'requester')

Relation Managers als Tabs

View-Pages zeigen Relation Managers als Tabs:

// In Resource
public static function getRelations(): array
{
return [
OrderRequestsRelationManager::class,
InvoicesRelationManager::class,
];
}

// In ViewRecord Page
use Filament\Resources\Pages\ViewRecord;

class ViewOrder extends ViewRecord
{
use ViewRecord\Concerns\HasRelationManagers;
}

Event-basierte Widget-Kommunikation

Widgets kommunizieren über Livewire Events:

// Dispatch in DateRangeFilter
$this->dispatch('dateRangeUpdated', start: $start, end: $end);

// Listen in anderen Widgets
#[On('dateRangeUpdated')]
public function updateDateRange($start, $end): void
{
$this->startDate = $start;
$this->endDate = $end;
}

Weiterführende Dokumentation