Takip et

Filament v4 Grupları: Yönetim Panelinde Güçlü Yapılandırma

Filament v4’te grup yönetimi nasıl yapılır? Bu kapsamlı rehber, yönetim panelinizde kullanıcılarınız için esnek izinler ve modüler yapılar oluşturmanızı sağlayacak gruplama özelliklerini adım adım açıklıyor. Güvenli, düzenli ve yönetilebilir bir panel deneyimi için grupların gücünü hemen keşfedin.

Modern web uygulamaları, günümüzde karmaşık iş süreçlerini ve farklı kullanıcı rollerini barındırır. Bu durum, yönetim panellerinde genellikle bir yetkilendirme ve organizasyon karmaşasına yol açabilir. Özellikle büyük ölçekli projelerde veya çok sayıda kullanıcının farklı yetki seviyeleriyle çalıştığı durumlarda, yönetim paneli menü yapısını düzenli ve anlaşılır tutmak büyük bir zorluk haline gelir. İşte tam bu noktada Filament v4’ün gruplama özellikleri devreye giriyor ve yönetim paneli deneyimini kökten iyileştiriyor.

Filament’teki gruplar, temelde navigasyon öğelerinizi (kaynaklar, sayfalar, özel URL’ler vb.) mantıksal birimler halinde bir araya getirmenize olanak tanıyan güçlü bir organizasyon aracıdır. Bu sayede, “Ürün Yönetimi”, “Finans Raporları” veya “Kullanıcı Ayarları” gibi tematik başlıklar altında ilgili tüm modülleri toplayabilirsiniz. Dolayısıyla, kullanıcıların aradıkları özelliklere daha hızlı ulaşmalarını sağlamakla kalmaz, aynı zamanda genel panel yapısını daha modüler ve yönetilebilir hale getirirsiniz. Örneğin, bir e-ticaret platformunda “Ürünler”, “Kategoriler” ve “Markalar” gibi kaynaklar, “Ürün Yönetimi” adlı tek bir grup altında toplanarak hem geliştiricinin işini kolaylaştırır hem de son kullanıcının navigasyon deneyimini sezgisel hale getirir.

Grupların bir diğer kritik önemi ise yetkilendirme mekanizmalarıyla olan entegrasyonudur. Rol tabanlı erişim kontrolü (RBAC) sistemlerinde, bir kullanıcının belirli bir gruba veya gruptaki kaynaklara erişimini kolayca yönetebilirsiniz. Bu, “Pazarlama Ekibi” grubunun sadece “Kampanyalar” ve “Blog Yazıları” gibi kaynaklara erişebilmesini sağlarken, “Finans Ekibi” grubunun “Faturalar” ve “Ödemeler” gibi kaynaklara odaklanmasını mümkün kılar. Böylece, gereksiz menü öğelerinin kullanıcıların karşısına çıkmasını engelleyerek hem güvenlik katmanını artırır hem de kullanıcı deneyimini özelleştirirsiniz. Ayrıca, geliştirme sürecinde, yeni bir özellik eklerken hangi gruba ait olacağını belirlemek, kod tabanının düzenli kalmasına ve sürdürülebilirliğin artmasına yardımcı olur. Sonuç olarak, Filament grupları sadece estetik bir düzenleme aracı olmaktan öte, kapsamlı bir yönetim paneli mimarisi oluşturmanın temel taşlarından biridir.

Filament Grupları Nasıl Tanımlanır ve Oluşturulur?

Filament v4’te grup oluşturmak oldukça basit ve sezgisel bir süreçtir. Temel olarak, panelinizi tanımladığınız PanelProvider dosyası içerisinde navigasyon gruplarınızı bildirmeli ve ardından kaynaklarınızı (resources), sayfalarınızı (pages) veya özel URL’lerinizi bu gruplara atamalısınız. Bu işlem, yönetim panelinizin sol menü çubuğundaki hiyerarşiyi doğrudan etkiler ve kullanıcılar için düzenli bir görünüm sağlar.

Öncelikle, projenizin app/Providers/Filament/ dizini altında yer alan AdminPanelProvider.php (veya kendi panelinizin adı) dosyasını açmanız gerekmektedir. Bu dosya içerisinde, panel() metodunun zincirleme çağrılarından birinde navigationGroups() metodunu kullanarak gruplarınızı tanımlayabilirsiniz. Her bir grup, basit bir dizi nesnesi olarak belirtilir ve genellikle bir label() metoduna sahiptir. İşte temel bir örnek:


namespace App\Providers\Filament;

use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\DisableBladeIconComponents;
use Filament\Http\Middleware\DispatchServingFilamentEvent;
use Filament\Navigation\NavigationGroup;
use Filament\Pages;
use Filament\Panel;
use Filament\PanelProvider;
use Filament\Support\Colors\Color;
use Filament\Widgets;
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Cookie\Middleware\EncryptCookies;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Session\Middleware\AuthenticateSession;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;

class AdminPanelProvider extends PanelProvider
{
    public function panel(Panel $panel): Panel
    {
        return $panel
            ->default()
            ->id('admin')
            ->path('admin')
            ->login()
            ->colors([
                'primary' => Color::Amber,
            ])
            ->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources')
            ->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages')
            ->pages([
                Pages\Dashboard::class,
            ])
            ->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\Filament\\Widgets')
            ->widgets([
                Widgets\AccountWidget::class,
                Widgets\FilamentInfoWidget::class,
            ])
            ->middleware([
                EncryptCookies::class,
                AddQueuedCookiesToResponse::class,
                StartSession::class,
                AuthenticateSession::class,
                ShareErrorsFromSession::class,
                VerifyCsrfToken::class,
                SubstituteBindings::class,
                DisableBladeIconComponents::class,
                DispatchServingFilamentEvent::class,
            ])
            ->authMiddleware([
                Authenticate::class,
            ])
            ->navigationGroups([
                NavigationGroup::make()
                    ->label('Mağaza Yönetimi')
                    ->icon('heroicon-o-shopping-bag'),
                NavigationGroup::make()
                    ->label('İçerik Yönetimi')
                    ->icon('heroicon-o-document-text'),
                NavigationGroup::make()
                    ->label('Sistem Ayarları')
                    ->icon('heroicon-o-cog-6-tooth'),
            ]);
    }
}

Yukarıdaki örnekte, üç farklı navigasyon grubu tanımladık: "Mağaza Yönetimi", "İçerik Yönetimi" ve "Sistem Ayarları". Her bir gruba, kullanıcı arayüzünde daha anlaşılır olmasını sağlamak için bir etiket (label()) ve isteğe bağlı olarak bir ikon (icon()) atadık. İkonlar genellikle Heroicons'tan gelir ve Filament tarafından otomatik olarak desteklenir.

Gruplarınızı tanımladıktan sonra, sıra ilgili Filament kaynaklarını bu gruplara atamaya gelir. Bunu, her bir kaynağın (Resource) kendi getNavigationGroup() metodu içerisinde yapabilirsiniz. Örneğin, "Ürün" kaynağını "Mağaza Yönetimi" grubuna atamak için app/Filament/Resources/ProductResource.php dosyanızda aşağıdaki gibi bir değişiklik yapmanız yeterlidir:


namespace App\Filament\Resources;

use App\Filament\Resources\ProductResource\Pages;
use App\Filament\Resources\ProductResource\RelationManagers;
use App\Models\Product;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;

class ProductResource extends Resource
{
    protected static ?string $model = Product::class;

    protected static ?string $navigationIcon = 'heroicon-o-cube';

    protected static ?string $navigationGroup = 'Mağaza Yönetimi'; // İşte atama burada!

    // ... diğer metodlar (form, table, getPages vb.)
}

Aynı mantıkla, "Blog" kaynağını "İçerik Yönetimi" grubuna, "Ayarlar" sayfasını "Sistem Ayarları" grubuna atayabilirsiniz. Bu yapılandırma sayesinde, Filament yönetim panelinizdeki sol menü, belirlediğiniz gruplar altında ilgili tüm öğeleri düzenli bir şekilde gösterecektir. Böylece hem görsel olarak daha düzenli bir panel elde eder hem de geliştirme süreçlerinizde modülerliği ve sürdürülebilirliği artırırsınız. Ayrıca, grupları tanımlarken sort() metodu ile sıralama da yapabilirsiniz, bu da menüdeki grupların görünüm sırasını belirlemenizi sağlar.

Grup Bazında İzin Yönetimi ve Yetkilendirme Stratejileri

Filament grupları, yönetim panelinin sadece estetik bir organizasyon aracı olmaktan öte, aynı zamanda güçlü bir yetkilendirme katmanı oluşturmak için de kullanılabilir. Özellikle spatie/laravel-permission paketi gibi popüler izin yönetim araçlarıyla entegre edildiğinde, kullanıcıların belirli gruplara veya gruplar altındaki kaynaklara erişimini çok daha granular bir şekilde kontrol edebilirsiniz. Bu, "rol tabanlı erişim kontrolü" (RBAC) stratejilerini uygularken size büyük esneklik sağlar.

Bir senaryo düşünelim: Bir şirket, Filament panelini kullanarak farklı departmanların kendi görev alanlarındaki verilere erişmesini ve bu verileri yönetmesini istiyor. Örneğin, "Satış Ekibi" sadece "Siparişler" ve "Müşteriler" gruplarına ait kaynakları görmeli, "İK Ekibi" ise sadece "Çalışanlar" ve "Bordrolar" gruplarındaki verilere erişebilmelidir. Bu tür bir izolasyonu sağlamak için, Filament'in izin mekanizmalarını gruplarla birlikte kullanırız.

İlk adım, Spatie paketini kullanarak rolleri ve izinleri tanımlamaktır. Örneğin, SalesManager (Satış Yöneticisi) ve HRManager (İK Yöneticisi) gibi roller oluşturabiliriz. Her role, ilgili kaynaklara yönelik izinler atanır. Daha sonra, Filament kaynaklarınızın canViewAny(), canCreate(), canEdit() gibi metodlarını kullanarak, kullanıcının belirli bir kaynağı görme veya üzerinde işlem yapma yetkisine sahip olup olmadığını kontrol edebilirsiniz. Bu metodlar genellikle Gate veya Policy sınıflarını çağırarak yetkilendirme kontrolü yapar.


// app/Filament/Resources/OrderResource.php içinde

use Filament\Resources\Resource;
use App\Models\User; // User modelinizi dahil edin

class OrderResource extends Resource
{
    // ...

    public static function canViewAny(): bool
    {
        return auth()->user()->hasRole('SalesManager') || auth()->user()->hasRole('Administrator');
    }

    public static function canCreate(): bool
    {
        return auth()->user()->hasRole('SalesManager');
    }

    // ... diğer yetkilendirme metodları
}

Bu yaklaşım, kullanıcıların belirli bir kaynağı görüp göremeyeceğini belirler. Ancak gruplarla birlikte daha da ileri gidebilirsiniz. Bir grup tanımının kendisinin görünürlüğünü kontrol etmek için navigationGroup() metodunda veya doğrudan PanelProvider içindeki NavigationGroup::make() metodunda canSee() metodunu kullanabilirsiniz:


// app/Providers/Filament/AdminPanelProvider.php içinde

use Filament\Navigation\NavigationGroup;
use App\Models\User;

// ...
            ->navigationGroups([
                NavigationGroup::make()
                    ->label('Mağaza Yönetimi')
                    ->icon('heroicon-o-shopping-bag')
                    ->canSee(fn(): bool => auth()->user()->hasRole('SalesManager') || auth()->user()->can('view store management')), // Yetki kontrolü
                NavigationGroup::make()
                    ->label('İçerik Yönetimi')
                    ->icon('heroicon-o-document-text')
                    ->canSee(fn(): bool => auth()->user()->hasRole('ContentManager') || auth()->user()->can('view content management')),
                // ...
            ]);

Yukarıdaki örnekte, "Mağaza Yönetimi" grubu sadece SalesManager rolüne sahip kullanıcılar veya 'view store management' iznine sahip kullanıcılar tarafından görülebilir. Bu sayede, ilgili kullanıcının panele giriş yaptığında sadece kendi görev alanıyla ilgili menü gruplarını görmesini sağlayabilirsiniz. Bu, hem panelin daha sade ve anlaşılır olmasını sağlar hem de yetkilendirme ihlallerini en aza indirir. Sonuç olarak, gruplar ve izin sistemleri entegrasyonu, kapsamlı, güvenli ve kullanıcı odaklı bir Filament yönetim paneli oluşturmanın anahtarıdır.

Uzman İpucu: Büyük ve karmaşık yetkilendirme senaryolarında, her bir Resource veya Page için ayrı ayrı canViewAny() gibi metodları tanımlamak yerine, Policy sınıflarını kullanmak çok daha yönetilebilir bir yaklaşım sunar. Bu sayede, yetkilendirme mantığınızı modelden ve kaynaktan ayırarak daha temiz ve modüler bir kod tabanı elde edebilirsiniz.

Gerçek Dünya Uygulamaları: Bir E-Ticaret Platformu Vaka Analizi

Filament v4'teki gruplama özelliğinin gerçek dünya projelerindeki değerini anlamak için, popüler bir senaryo olan bir e-ticaret platformu yönetim panelini ele alalım. Büyük bir e-ticaret sitesi genellikle pazarlama, operasyon, finans, müşteri hizmetleri ve ürün yönetimi gibi farklı departmanları ve bu departmanların kullandığı birçok modülü barındırır. Bu kadar çok modül ve farklı yetki seviyesiyle, panelin düzenini sağlamak kritik önem taşır.

Bu senaryoda, Filament gruplarını kullanarak yönetim panelini aşağıdaki gibi yapılandırabiliriz:

  1. Ürün Yönetimi Grubu: Bu grup, e-ticaret sitesinin kalbi olan ürünlerle ilgili tüm modülleri içerir. İçerisinde ProductResource (Ürünler), CategoryResource (Kategoriler), BrandResource (Markalar) ve AttributeResource (Özellikler) gibi kaynaklar bulunabilir. Bu gruba genellikle ürün yöneticileri, envanter sorumluları ve pazarlama ekiplerinin bir kısmı erişim sağlar.
  2. Sipariş & Müşteri Grubu: E-ticaret operasyonlarının temelini oluşturan siparişler ve müşteriler bu grupta yer alır. OrderResource (Siparişler), CustomerResource (Müşteriler), ShippingMethodResource (Kargo Metotları) ve InvoiceResource (Faturalar) gibi kaynaklar burada bulunabilir. Müşteri hizmetleri, operasyon ve lojistik ekipleri bu grubun ana kullanıcılarıdır.
  3. Pazarlama & Kampanya Grubu: E-ticaret sitelerinin büyümesi için kritik olan pazarlama faaliyetleri bu grupta toplanır. CouponResource (Kuponlar), CampaignResource (Kampanyalar), BannerResource (Bannerlar) ve BlogResource (Blog Yazıları) gibi kaynaklar bu gruba atanır. Pazarlama departmanı ve içerik yöneticileri bu grubun yetkili kullanıcılarıdır.
  4. Finans & Raporlama Grubu: Sitenin finansal sağlığını takip etmek için gerekli olan tüm modüller burada yer alır. PaymentTransactionResource (Ödeme İşlemleri), RefundResource (İadeler), TaxRateResource (Vergi Oranları) ve belki özel rapor sayfaları bu gruba dahil edilebilir. Finans departmanı ve üst düzey yöneticiler bu gruba erişebilir.
  5. Sistem Ayarları Grubu: Platformun genel ayarları ve teknik konfigürasyonları bu grupta toplanır. UserResource (Kullanıcılar), RoleResource (Roller), PermissionResource (İzinler) ve GeneralSettingsPage (Genel Ayarlar Sayfası) gibi kritik modüller burada yer alır. Sistem yöneticileri ve üst düzey IT personeli bu gruba tam erişime sahiptir.

Bu gruplama sayesinde, bir müşteri hizmetleri temsilcisi panele girdiğinde sadece "Sipariş & Müşteri" grubunu ve belki sadece görüntüleme izinlerine sahip olduğu "Ürün Yönetimi" grubunu görür. Pazarlama müdürü ise sadece "Pazarlama & Kampanya" grubunu ve sınırlı erişimle diğer grupları görür. Bu, kullanıcıların sadece kendi görev alanlarıyla ilgili bilgilere odaklanmasını sağlayarak verimliliği artırır ve paneldeki karmaşıklığı azaltır.

Aşağıdaki tablo, bu vaka analizindeki gruplar ve onlara atanabilecek örnek yetkileri özetlemektedir:

Grup Adı Örnek Kaynaklar Erişim Sağlayabilecek Roller Temel İzinler
Ürün Yönetimi Ürünler, Kategoriler, Markalar Ürün Yöneticisi, Envanter Sorumlusu Oluşturma, Düzenleme, Silme, Görüntüleme
Sipariş & Müşteri Siparişler, Müşteriler, Kargo Metotları Müşteri Temsilcisi, Operasyon Yöneticisi Görüntüleme, Sipariş Güncelleme, Müşteri Bilgisi Görüntüleme
Pazarlama & Kampanya Kuponlar, Kampanyalar, Blog Yazıları Pazarlama Uzmanı, İçerik Yöneticisi Oluşturma, Düzenleme, Kampanya Yönetimi
Finans & Raporlama Ödeme İşlemleri, İadeler, Vergi Oranları Finans Müdürü, Üst Düzey Yönetici Tümünü Görüntüleme, Rapor Oluşturma
Sistem Ayarları Kullanıcılar, Roller, İzinler, Genel Ayarlar Sistem Yöneticisi Tüm Kaynaklara Tam Kontrol

Bu detaylı gruplandırma ve yetkilendirme stratejisi, e-ticaret platformunun yönetim panelini sadece daha organize etmekle kalmaz, aynı zamanda güvenlik risklerini azaltır ve farklı kullanıcı profilleri için kişiselleştirilmiş bir deneyim sunar. Dolayısıyla, Filament grupları sayesinde, kompleks iş gereksinimlerine sahip uygulamaların bile yönetim panellerini kolayca ölçeklendirebilir ve sürdürülebilir hale getirebilirsiniz.

İleri Düzey Filament Gruplandırma Teknikleri ve Optimizasyon

Filament grupları, temel seviyede bile oldukça kullanışlı olsa da, daha karmaşık ihtiyaçlar için ileri düzey teknikler ve optimizasyon ipuçları mevcuttur. Bu teknikler, yönetim panelinizin daha dinamik, verimli ve özelleştirilebilir olmasını sağlar.

Dinamik Grup Görünürlüğü Nasıl Sağlanır?

Bazen, bir grubun belirli koşullar altında görünmesini isteyebilirsiniz. Örneğin, sadece belirli bir ayar etkinleştirildiğinde veya belirli bir veri bulunduğunda bir grubun panelde görünmesi gerekebilir. Bunu, navigationGroups() metodunda her bir NavigationGroup öğesi için canSee() metodunu kullanarak başarabilirsiniz. Bu metot, bir closure (kapatma) kabul eder ve closure'ın döndürdüğü boolean değere göre grubun görünürlüğünü ayarlar.


// app/Providers/Filament/AdminPanelProvider.php içinde

use Filament\Navigation\NavigationGroup;
use App\Models\Setting; // Ayar modelinizi dahil edin

// ...
            ->navigationGroups([
                NavigationGroup::make()
                    ->label('Beta Özellikler')
                    ->icon('heroicon-o-flask')
                    ->canSee(fn(): bool => Setting::get('enable_beta_features', false)), // Sadece Beta özellikler aktifse görünür
                NavigationGroup::make()
                    ->label('Analizler')
                    ->icon('heroicon-o-chart-bar')
                    ->canSee(fn(): bool => auth()->user()->hasPermissionTo('view analytics')), // İzne bağlı görünürlük
                // ...
            ]);

Bu yöntem, panelinizin bağlamına göre grupların dinamik olarak gösterilmesini veya gizlenmesini sağlayarak daha esnek bir kullanıcı deneyimi sunar. Örneğin, bir modül henüz geliştirme aşamasındayken sadece belirli yöneticilerin görmesini sağlayabilir, genel kullanıcılardan gizleyebilirsiniz.

Çoklu Panel Kurulumlarında Grupların Yönetimi

Filament v4, aynı Laravel uygulaması içinde birden fazla yönetim paneli oluşturmanıza olanak tanır. Her panelin kendi PanelProvider'ı olduğu için, her panel için ayrı ayrı navigasyon grupları tanımlayabilirsiniz. Bu, örneğin bir "Satıcı Paneli" ve bir "Yönetici Paneli" olan bir platformda, her panelin kendine özgü menü yapısını ve gruplarını bulundurabileceği anlamına gelir. Her panel sağlayıcısında kendi navigationGroups() metodunuzu tanımlayarak, bu panellerin bağımsızlığını koruyabilirsiniz. Bu, modülerliği artırır ve farklı hedef kitlelere yönelik özelleştirilmiş deneyimler sunar.

Performansa Etkisi ve Optimizasyon İpuçları Nelerdir?

Filament grupları genellikle performans üzerinde gözle görülür bir olumsuz etkiye sahip değildir çünkü bunlar temelde statik tanımlamalardır veya basit veritabanı sorgularıyla ilişkilendirilir. Ancak, canSee() metodu içerisinde karmaşık ve yavaş veritabanı sorguları çalıştırırsanız, bu durum menü yükleme süresini etkileyebilir. Bu tür durumları önlemek için:

  • canSee() metodunda veritabanı işlemlerini minimize edin veya cache'leme kullanın.
  • İzin kontrolleri için spatie/laravel-permission gibi optimize edilmiş paketlerin sunduğu metodları tercih edin.
  • Grup sayısını makul bir seviyede tutun; çok fazla grup, menüde karmaşıklığa yol açabilir.

Ayrıca, navigationGroups() metodunda sıralama (sort()) kullanarak grupların menüdeki fiziksel sırasını kontrol edebilirsiniz. Bu, sadece görsel bir iyileştirme olmakla kalmaz, aynı zamanda sık kullanılan grupların daha üstte yer alarak kullanıcı erişimini hızlandırmasına yardımcı olur. Sonuç olarak, Filament gruplarını bilinçli ve stratejik bir şekilde kullanarak, panelinizin sadece düzenli değil, aynı zamanda son derece güçlü ve performanslı olmasını sağlayabilirsiniz.

Mobil Uyumlu Filament Grupları Nasıl Tasarlanır?

Günümüz dünyasında, web uygulamalarına erişimin büyük bir kısmı mobil cihazlar üzerinden gerçekleşmektedir. Yönetim panelleri de bu trendin dışında kalmamalıdır. Filament v4, kutudan çıktığı haliyle oldukça responsive (duyarlı) bir yapıya sahiptir ve mobil cihazlarda iyi bir deneyim sunar. Ancak, grupların ve navigasyonun mobil uyumluluğunu daha da iyileştirmek için bazı noktalara dikkat edebilir ve gerektiğinde özelleştirmeler yapabilirsiniz.

Filament'in sol menüsü, ekran boyutu küçüldüğünde otomatik olarak daralır veya bir "hamburger menü" ikonunun arkasına gizlenir. Gruplarınız bu yapının doğal bir parçası olarak bu davranışa uyum sağlar. Ancak, özellikle çok sayıda grup ve alt öğeye sahipseniz, mobil ekranda bunların nasıl göründüğünü test etmek ve kullanıcı deneyimini optimize etmek önemlidir. Örneğin, grup başlıkları çok uzunsa veya ikonlar küçük ekranlarda karmaşık görünüyorsa, kullanıcılar için kafa karıştırıcı olabilir.

Özelleştirilmiş Stil Optimizasyonları

Filament, kendi stil dosyanızı ekleyerek varsayılan görünümlerini özelleştirmenize olanak tanır. Eğer grup başlıklarınızın veya menü öğelerinizin mobil cihazlarda farklı bir boyuta veya hizalamaya sahip olmasını istiyorsanız, bunu CSS medya sorguları (@media queries) ile yapabilirsiniz. Örneğin, mobil cihazlarda grup başlıklarının font boyutunu küçültmek veya ikonları gizlemek isteyebilirsiniz.


/* app/Filament/Resources/ProductResource.php içinde */

/* resources/css/filament/admin/tailwind.css veya özel CSS dosyanızda */

@media (max-width: 768px) {
    .filament-sidebar .filament-sidebar-nav-group-label {
        font-size: 0.85rem; /* Mobil cihazlarda grup başlıklarının font boyutunu küçült */
        padding-left: 0.5rem; /* Sol boşluğu ayarla */
    }

    .filament-sidebar .filament-sidebar-nav-group .filament-sidebar-item {
        padding-left: 1.5rem; /* Alt menü öğelerinin boşluğunu ayarla */
    }

    /* İkonları mobil görünümde gizlemek isterseniz */
    .filament-sidebar .filament-sidebar-nav-group-icon {
        display: none;
    }
}

/* Daha küçük ekranlar için */
@media (max-width: 480px) {
    .filament-sidebar .filament-sidebar-nav-group-label {
        font-size: 0.8rem;
        /* Diğer mobil uyumlu ayarlamalar */
    }
}

Bu CSS kodları, Filament'in varsayılan Tailwind CSS sınıflarını hedef alarak mobil cihazlarda menü gruplarınızın görünümünü özelleştirmenizi sağlar. Bu sayede, daha okunabilir ve kullanışlı bir mobil deneyim yaratabilirsiniz. Filament'in sunduğu özelleştirme yetenekleri sayesinde, sitenizin veya uygulamanızın marka kimliğine uygun, tutarlı ve mobil dostu bir yönetim paneli tasarlamanız mümkündür.

Uzman İpucu: Mobil cihazlarda menü karmaşasını önlemek için, özellikle kritik olmayan veya nadiren kullanılan grupları canSee() metodu ile sadece masaüstü kullanıcılarına göstermeyi düşünebilirsiniz. Bu, mobil kullanıcıların ana görevlerine daha hızlı odaklanmalarını sağlayacaktır.

Özetle, Filament v4'ün gruplama özellikleri, hem yapısal düzen hem de yetkilendirme esnekliği sunarak yönetim paneli geliştirme sürecini önemli ölçüde basitleştirir. Mobil uyumluluk konusunda Filament'in kendi responsive yapısı güçlü bir başlangıç noktası olsa da, özel stil ayarlamaları ile mobil kullanıcı deneyimini mükemmelleştirmek her zaman mümkündür.

Sonuç ve Sıkça Sorulan Sorular

Filament v4'teki gruplama özellikleri, yönetim paneli geliştirme süreçlerini basitleştiren ve son kullanıcı deneyimini iyileştiren kritik bir araçtır. Bu makale boyunca, grupların neden önemli olduğundan, nasıl tanımlanıp oluşturulacağına, izin yönetimiyle nasıl entegre edileceğine ve gerçek dünya senaryolarında nasıl kullanılabileceğine kadar geniş bir yelpazede bilgi edindik. Ayrıca, ileri düzey teknikler ve mobil uyumluluk için ipuçlarıyla, Filament panellerinizi daha da güçlendirme yollarını keşfettik.

Gruplar sayesinde, büyük ve karmaşık uygulamaların yönetim panellerini modüler, düzenli ve yönetilebilir hale getirebilirsiniz. Bu, sadece geliştiricilerin işini kolaylaştırmakla kalmaz, aynı zamanda farklı yetki seviyelerindeki kullanıcıların sadece kendileriyle ilgili bilgilere erişimini sağlayarak güvenliği artırır ve kullanıcı verimliliğini yükseltir. Filament'in esnek ve kapsamlı yapısı, bu grupları uygulamanızın özel ihtiyaçlarına göre şekillendirmenize olanak tanır. Sonuç olarak, Filament v4'te gruplar, sadece bir navigasyon düzenlemesi değil, aynı zamanda ölçeklenebilir ve sürdürülebilir bir yönetim paneli mimarisinin temel taşıdır.

Sıkça Sorulan Sorular

Gruplar ile roller arasındaki temel fark nedir?

Gruplar (Filament navigasyon grupları), yönetim panelindeki menü öğelerini mantıksal olarak düzenlemek için kullanılan görsel ve yapısal bir araçtır. "Ürün Yönetimi" veya "Sistem Ayarları" gibi başlıklar altında ilgili modülleri toplar. Roller ise (genellikle Spatie gibi paketlerle yönetilen), bir kullanıcının sistemdeki belirli eylemleri gerçekleştirme veya belirli verilere erişme yetkisini tanımlayan yetkilendirme mekanizmalarıdır. Gruplar, genellikle rollerle birlikte çalışarak, bir rolün hangi gruplara erişebileceğini belirlemek için kullanılır, ancak doğrudan yetki tanımlamazlar.

Filament'te bir kaynağı birden fazla gruba atayabilir miyim?

Hayır, Filament'in mevcut yapısında bir kaynağı (Resource) doğrudan birden fazla navigasyon grubuna atayamazsınız. Bir kaynak, $navigationGroup özelliği veya getNavigationGroup() metodu aracılığıyla yalnızca tek bir gruba atanabilir. Ancak, aynı kaynağı farklı panellerde (multi-tenancy senaryoları gibi) farklı gruplar altında gösterebilir veya farklı kaynakları benzer isimli gruplara atayarak dolaylı bir gruplama hissi yaratabilirsiniz.

Dinamik grup isimleri kullanmak mümkün müdür?

Evet, mümkündür. PanelProvider içerisindeki NavigationGroup::make() metodunun label() metoduna bir closure (kapatma) ile dinamik bir değer atayabilirsiniz. Bu closure, PHP kodunuzu çalıştırarak, örneğin bir veritabanı ayarından veya oturum bilgisinden dinamik olarak grup etiketini alabilir:


NavigationGroup::make()
    ->label(fn (): string => auth()->user()->isAdministrator() ? 'Yönetici Paneli' : 'Kullanıcı Paneli')

Filament grupları performansı olumsuz etkiler mi?

Genellikle hayır, Filament grupları panel performansını doğrudan ve olumsuz etkilemez. Grup tanımlamaları genellikle statiktir veya çok hafif mantık içerir. Ancak, eğer canSee() metodları içerisinde karmaşık ve optimize edilmemiş veritabanı sorguları veya yavaş işlemler gerçekleştirirseniz, bu durum menünün yüklenme süresini etkileyebilir. Performansı optimize etmek için bu metodlarda basit ve hızlı kontroller kullanmaya özen gösterilmelidir.

Grupların varsayılan sıralamasını nasıl değiştirebilirim?

Grupların menüdeki varsayılan sıralamasını değiştirmek için PanelProvider içerisindeki NavigationGroup::make() metodunda sort() metodunu kullanabilirsiniz. Bu metod bir tam sayı değeri alır ve daha düşük sayılar daha üstte görünür:


NavigationGroup::make()
    ->label('Mağaza Yönetimi')
    ->sort(1), // İlk sırada görünür
NavigationGroup::make()
    ->label('İçerik Yönetimi')
    ->sort(2), // İkinci sırada görünür

Eğer bir gruba sort() değeri vermezseniz, Filament varsayılan olarak alfabetik sıralama veya tanımlandıkları sıraya göre işlem yapabilir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.