Update cursor rules for Filament 4.x: Refined tab usage guidelines, clarified namespace imports, and emphasized the distinction between resource list page tabs and form/schema tabs. Added critical notes on incorrect usage of Tab components and provided examples for proper implementation.

This commit is contained in:
Ümit Tunç
2025-10-29 17:06:12 -03:00
parent edf8949a6a
commit e704146df9
+86 -6
View File
@@ -102,11 +102,85 @@ use Filament\Forms\Components\FileUpload;
use Filament\Schemas\Components\Section; // ✅ Doğru
use Filament\Schemas\Components\Grid; // ✅ Doğru
use Filament\Schemas\Components\Fieldset; // ✅ Doğru
use Filament\Schemas\Components\Flex; // ✅ Doğru
// Tabs components (ÖNEMLİ: Forms namespace!)
use Filament\Forms\Components\Tabs; // ✅ Doğru
// Tab kullanımı: Tabs\Tab::make() şeklinde kullan
// Import gerekmez, Tabs namespace'i üzerinden erişilir
// Tabs components (ÖNEMLİ: Schemas namespace!)
use Filament\Schemas\Components\Tabs; // ✅ Doğru
use Filament\Schemas\Components\Tabs\Tab; // ✅ Doğru
// FORM/INFOLIST içindeki tab'lar için yukarıdaki import'ları kullan
// Wizard component (Schemas namespace!)
use Filament\Schemas\Components\Wizard;
use Filament\Schemas\Components\Wizard\Step;
// Infolist entry components
use Filament\Infolists\Components\TextEntry;
use Filament\Infolists\Components\IconEntry;
use Filament\Infolists\Components\ImageEntry;
```
#### **Filament 4.x TAB KULLANIM KURALLARI (KRİTİK!):**
Filament 4.x'te **iki farklı Tab sistemi** vardır:
**1. Resource List Pages Tabs (getTabs() metodu):**
```php
// ❌ YANLIŞ - Bu class Filament 4.x'te YOK!
use Filament\Resources\Components\Tab;
// ✅ DOĞRU - ListRecords page'lerinde getTabs() için
use Filament\Schemas\Components\Tabs\Tab;
// Örnek kullanım:
class ListSettings extends ListRecords
{
public function getTabs(): array
{
return [
'all' => Tab::make('Tümü')
->icon('heroicon-o-squares-2x2')
->badge(100)
->modifyQueryUsing(fn (Builder $query) => $query),
'active' => Tab::make('Aktif')
->icon('heroicon-o-check')
->badge(50)
->modifyQueryUsing(fn (Builder $query) => $query->where('is_active', true)),
];
}
}
```
**2. Form/Schema Tabs (Form içinde kullanım):**
```php
// ✅ DOĞRU - Form/Schema içinde tabs için
use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab;
// Örnek kullanım:
public static function form(Schema $schema): Schema
{
return $schema
->components([
Tabs::make('Tabs')
->tabs([
Tab::make('Genel Bilgiler')
->icon('heroicon-o-information-circle')
->schema([
TextInput::make('name'),
// ...
]),
Tab::make('SEO')
->icon('heroicon-o-magnifying-glass')
->schema([
TextInput::make('meta_title'),
// ...
]),
])
->columnSpanFull()
->persistTabInQueryString(),
]);
}
```
#### **YANLIŞ KULLANIM (Eski Filament 3.x):**
@@ -115,6 +189,8 @@ use Filament\Forms\Components\Tabs; // ✅ Doğru
use Filament\Tables\Actions\EditAction; // ❌
use Filament\Forms\Components\Section; // ❌
use Filament\Forms\Components\Grid; // ❌
use Filament\Forms\Components\Tabs; // ❌ Forms namespace altında Tabs YOK
use Filament\Resources\Components\Tab; // ❌ Bu class hiç YOK
// ❌ YANLIŞ - Eski metod adları
$table
@@ -122,14 +198,18 @@ $table
->bulkActions([...]) // ❌ Kullanma!
```
#### **ÖZET:**
#### **ÖZET (Filament 4.x Import Referansı):**
- ✅ **Table Actions:** `Filament\Actions\` namespace
- ✅ **Table Columns:** `Filament\Tables\Columns\` namespace
- ✅ **Table Filters:** `Filament\Tables\Filters\` namespace
- ✅ **Form Inputs:** `Filament\Forms\Components\` namespace
- ✅ **Layout Components:** `Filament\Schemas\Components\` namespace (Section, Grid, Tabs)
- ✅ **Layout Components:** `Filament\Schemas\Components\` namespace
- ✅ **Tabs (Tüm Kullanımlar):** `Filament\Schemas\Components\Tabs\Tab` (Her yerde bu!)
- ✅ **Infolist Entries:** `Filament\Infolists\Components\` namespace
- ✅ **Table Methods:** `->recordActions()` ve `->toolbarActions()`
**Önemli Not:** Filament 4.x'te `Filament\Resources\Components\Tab` diye bir class **YOK**. Tüm tab kullanımları `Filament\Schemas\Components\Tabs\Tab` ile yapılır!
### Dil Dosyası Yapısı
<?php