Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: Filament İçe Aktarım Kullanıcı Deneyimini Sürekli Hata CSV İndirmeleriyle İyileştirin
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » Filament İçe Aktarım Kullanıcı Deneyimini Sürekli Hata CSV İndirmeleriyle İyileştirin

Yazılım

Filament İçe Aktarım Kullanıcı Deneyimini Sürekli Hata CSV İndirmeleriyle İyileştirin

teknomers
Son güncelleme: 11 Mayıs 2026 00:25
teknomers
Paylaş
Paylaş

FilamentPHP, kullanıcılara işlem tamamlandığında geri bildirim sağlayan yerleşik bir import action sunar.

Bir import işlemi tamamlandığında, sonucunu gösteren bir bildirim görüntülenir ve başarısız satırları içeren bir CSV dosyasının indirme bağlantısı sağlanır.

Bu basit kullanım senaryoları için iyi çalışsa da, gerçek dünya uygulamalarında çabuk sınırlayıcı hale gelir:

  • Import’ı başlatan kullanıcı dışında kimse hata dosyasına erişemez
  • Bildirim kapatıldığında indirme bağlantısı kaybolur
  • Önceki import’ları görüntüleme ya da yeniden analiz etme imkanı yoktur

👉 Takım ortamında bu hızlı bir şekilde sıkıntı yaratabilir.

Bu makalede, aşağıdaki amaca yönelik basit ve temiz bir çözüm uygulayacağız:

  • Tüm import’ları bir Filament kaynağında listelemek
  • Yetkilendirilmiş kullanıcıların hata CSV dosyalarını indirmesine izin vermek
  • Geçmiş import’ları yönetmek ve silmek



Filament’in Varsayılan Davranışını Anlamak

Filament, import işlemlerini yönetmek için dahili bir model sağlar:

Filament\Actions\Imports\Models\Import
        

Bu model, birkaç yararlı nitelik içerir:

  • completed_at → timestamp
  • processed_rows → integer
  • total_rows → integer
  • successful_rows → integer

Ayrıca aşağıdaki gibi hesaplanan değerleri de sunar:

$import->getFailedRowsCount()
        

Filament, başarısız satırları indirmek için kullanılan dahili bir rota tanımlar:

Route::get('/imports/{import}/failed-rows/download', DownloadImportFailureCsv::class)
        ->name();
        

Bu rotayı geçersiz kılmanıza gerek yok, biz sadece ona erişim kontrollerini ayarlayacağız.



Erişim Problemi

Varsayılan olarak, eğer bir Politika tanımlanmışsa, Filament erişimi şu şekilde kısıtlar:

$importPolicy = Gate::getPolicyFor($import::class);

        if (filled($importPolicy) && method_exists($importPolicy, )) {
            Gate::forUser($user)->authorize(, Arr::wrap($import));
        } else {
            abort_unless($import->user()->is($user), 403);
        }
        

Filament\Actions\Imports\Http\Controllers\DownloadImportFailureCsv Controller’ın bir kesiti

Bu, şunları gerektirir:

  • Bir politika yoksa → yalnızca sahibi dosyayı indirebilir
  • Bir politika varsa → Filament yetkilendirmeyi buna devreder

Çözüm oldukça basit: bir Politika tanımlayın.



Import Politikasını Oluşturma

Politikayı oluşturun:

php artisan make:policy ImportPolicy --model=\Actions\Imports\Models\Import"
        

İşte örnek bir uygulama:

namespace App\Policies;

        use App\Enums\ImportImporterEnum;
        use App\Enums\PermissionEnum;
        use App\Models\User;
        use App\Services\PermissionService;
        use Filament\Actions\Imports\Models\Import;
        use Illuminate\Auth\Access\HandlesAuthorization;

        class ImportPolicy
        {
            use HandlesAuthorization;

            public function __construct(protected PermissionService $permissionService) {}

            public function viewAny(User $user): bool
            {
                return $user->hasPermissionTo($this->permissionService->getPermissionName(PermissionEnum::VIEW_ANY, Import::class));
            }

            public function view(User $user, Import $import): bool
            {
                if (is_null($import->completed_at) || $import->getFailedRowsCount() == 0) {
                    return false;
                }

                return $user->hasPermissionTo($this->permissionService->getPermissionName(PermissionEnum::VIEW, Import::class));
            }

            public function delete(User $user, Import $import): bool
            {
                if ($import->importer == ImportImporterEnum::PRODUCT_MAPPING->value) {
                    return false;
                }

                return $user->hasPermissionTo($this->permissionService->getPermissionName(PermissionEnum::DELETE, Import::class));
            }
        }
        

Bu örnekte, izinler bir rol/izin sistemi kullanılarak yönetilir (ör. Spatie Laravel Permission) ile kendi İzin Servisi ve Enum. Bu mantığı kendi uygulamanıza uyarlayın.

İdeal olarak, Filament, view yerine özel bir download metodu kullanır, çünkü bunlar farklı endişeleri temsil eder. Ancak, basitlik için varsayılan davranışla devam edeceğiz.



Politikanın Kaydedilmesi

Politikanızı hizmet sağlayıcınızda kaydetmeyi unutmayın:

use Filament\Actions\Imports\Models\Import;

        public function boot(): void
        {
            Gate::policy(Import::class, ImportPolicy::class);
            ...
        }
        



Filament Kaynağını Oluşturma

Artık import’ları yönetim panelinde görüntüleyelim:

php artisan make:filament-resource Import --model-namespace=Filament\\Actions\\Imports\\Models
        

Burada formlara ihtiyacımız yok, sadece bir listeleme sayfası gerekiyor. Bu nedenle Schemas formatını ve CreateImport ile EditImport gibi bazı sayfaları silebilirsiniz.



Kaynak Sınıfı

class ImportResource extends Resource
        {
            protected static ?string $model = Import::class;

            public static function table(Table $table): Table
            {
                return ImportsTable::configure($table);
            }

            public static function getPages(): array
            {
                return [
                    => ListImports::route(),
                ];
            }
        }
        



Import’lar Tablosunu Oluşturma

İşte tablonun basitleştirilmiş bir versiyonu:

class ImportsTable
        {
            public static function configure(Table $table): Table
            {
                return $table
                    ->columns([
                        TextColumn::make()->searchable(),
                        TextColumn::make(),
                        TextColumn::make(),
                        TextColumn::make()->numeric(),
                        TextColumn::make()->numeric(),
                        TextColumn::make()->numeric(),
                        TextColumn::make()->sortable(),
                    ])
                    ->recordActions([
                        ActionGroup::make([
                            Action::make()
                                ->label()
                                ->color()
                                ->icon(Heroicon::ArrowDownCircle)
                                ->url(fn (Import $import) => URL::signedRoute(, [=> filament()->getAuthGuard(), => $import], absolute: false), shouldOpenInNewTab: true)
                                ->authorize(),

                            DeleteAction::make(),
                        ]),
                    ])
                    ->defaultSort(, );
        }
        }
        



Ana Özellik: Başarısız Satırları İndirme

En önemli kısım bu eylemdir:

Action::make()
        

Bu:

  • Filament’in dahili imzalı rotasını kullanır
  • Yetkilendirme için view politikasına dayanır

👉 Politika ile birleştirildiğinde, bu şunları garanti eder:

  • Yalnızca yetkilendirilmiş kullanıcılar hata dosyalarına erişebilir
  • İndirmeler güvenli kalır
  • Kullanıcı deneyimi önemli ölçüde iyileşir



Nihai Sonuç

Artık yalnızca bir Politika ve bir Kaynak ile:

  • Tam bir import geçmişi
  • Hata CSV dosyalarına kalıcı erişim
  • Takım dostu erişim kontrolü
  • Daha temiz ve profesyonel bir yönetim deneyimi



Sonuç

Filament güçlü yapı taşları sağlar, ancak bazı özellikler, örneğin import geçmişi, tam anlamıyla parlayabilmesi için biraz özelleştirme gerektirir.

Bu yaklaşım sayesinde, gereksiz karmaşıklık eklemeden hem kullanılabilirliği hem de sürdürülebilirliği artırıyorsunuz.

Bundan sonraki aşamalarda şunları ekleyebilirsiniz:

  • Tekrar deneme mekanizmaları
  • Import durumu filtreleri
  • vb.

🚀 Daha ileriye gitmek ister misiniz?

Filament ile ilgili daha fazla makale için Filament Mastery adresini ziyaret edin.

Üretim için hazır Laravel & Filament kurulumlarını da paylaşıyorum (Docker, CI/CD, dağıtım…).
Tam erişim için Erken Destekçiler kategorisine katılın

Kaynak: Orijinal Makale

Contents
  • Filament’in Varsayılan Davranışını Anlamak
  • Erişim Problemi
  • Import Politikasını Oluşturma
  • Politikanın Kaydedilmesi
  • Filament Kaynağını Oluşturma
    • Kaynak Sınıfı
  • Import’lar Tablosunu Oluşturma
  • Ana Özellik: Başarısız Satırları İndirme
  • Nihai Sonuç
  • Sonuç
Python’u Geride Bırak: PHP, Yapay Zeka Ajanlarının Uyuyan Devi
Laravel’da Yapay Zeka Destekli İçerik Üretimi: OpenAI ve Kuyruklar ile Pratik Bir Rehber
Laravel’de N+1 Sorununu Ortadan Kaldırma: 120 Sorgudan 8 Sorguya 20 Dakikada
Dijital Dönüşüm: Laravel ile Kediri Belediyesi BPPKAD için NPWPD Sistemi Geliştirme Deneyimi
Kendi Planlama Pokeri Araçımı Neden Geliştirdim (ve Arkasında Ne Var)
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Anthropic, AI’nin ‘kötü’ Tasvirlerinin Claude’un Şantaj Denemelerine Neden Olduğunu Söyledi
Sonraki Makale Bambu Lab’a ‘Kendine iyi bak’ diyerek dava tehdidiyle ilgili yanıt

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Corgi, Y Combinator Destekli Sigorta Teknoloji Girişi, Açık Kaynağı Çalmadığını Açıkladı
Genel
2026 Prime Day İndiriminde Fellow Espresso Series 1’de 200 Dolar Tasarruf!
Genel
Acil Uyarı: Rus Hackerlar Signal Yedek Anahtarlarını Hedef Alıyor
Siber Güvenlik
Prime Day’de 36 Saat Sonrasında Aldığım Tek Şey Bu!
Liste
TP-Link’in 8-port 2.5G Ethernet switch’i 50 dolarla harika fırsat!
Donanım
Prime Günü’nde İhtiyacınız Olmasa da Kesinlikle İsteyeceğiniz 100 Dolar Altındaki Gadget’lar
Liste
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?