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:
| Eigenschaft | Wert |
|---|---|
| Panel-ID | admin |
| URL-Pfad | /admin |
| Primary Color | Color::Amber |
| Default Locale | de |
Installierte Plugins
| Plugin | Package | Beschreibung |
|---|---|---|
| EnvironmentIndicatorPlugin | pxlrbt/filament-environment-indicator | Zeigt aktuelle Umgebung (dev/staging/prod) |
| ActivitylogPlugin | rmsramos/activitylog | Aktivitätsprotokoll für Änderungen |
| LanguageSwitchPlugin | bezhansalleh/filament-language-switch | Sprachumschaltung |
| GoogleMapsPlugin | cheesegrits/filament-google-maps | Google Maps Integration |
| DateRangePickerPlugin | malzariey/filament-daterangepicker-filter | Datumsbereich-Filter |
Navigation
Die Navigation ist nach funktionalen Gruppen organisiert:
| Gruppe | Resources/Pages | Sort |
|---|---|---|
| - | Dashboard | -2 |
| - | Reports | 2 |
| Benutzerverwaltung | Users | 1 |
| Auftragsverwaltung | Orders, OrderRequests, OrderRatings | 1, 3, 15 |
| Kommunikation | Notifications, NotificationTemplates, EmailTemplates | 10, 11, 12 |
| System | Categories, TariffRates, SystemLanguages, LegalDocuments, Settings, Exports | 2, 20, 21, 22, 99, 99 |
Navigation Badges
Einige Resources zeigen dynamische Badges:
| Resource | Badge | Farbe |
|---|---|---|
| OrderRequestResource | Anzahl offener Anfragen | Warning |
| NotificationResource | Ungelesene Anzahl | - |
| NotificationTemplateResource | Inaktive Anzahl | Warning |
| SystemLanguageResource | Gesamtanzahl | Primary |
| LegalDocumentResource | Aktive Anzahl | Primary |
Lokalisierung
Alle Labels verwenden __('filament.*') Translation Keys. Die deutschen Übersetzungen befinden sich in:
lang/de/filament.phplang/de/filament-panels.phplang/de/filament-actions.phplang/de/filament-tables.phplang/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;
}