Proje: Okul Platform · Hub: Okul Platform — Incidents
Responsive makale listeleme sayfasında sort pill’lerine (En Çok Okunan / En Yeni / Editör Seçimi / Son Güncellenen) tıklanınca 500 HttpException “Seçilen Sıralama geçersiz” fırlıyordu; “Daha Fazla Yükle” AJAX fetch’i başarısız olup fallback’te tüm sayfa HTML’i grid’e append ediyordu (kullanıcı ardı ardına aynı makale listesini üst üste görüyordu).
Kök neden
App\Http\Requests\Front\Articles\IndexArticleRequest HasPagination
trait’ini kullanıyor. Trait sort field’ını strict Rule::in whitelist ile
validate ediyor:
// HasPagination::paginationRules
$rules['sort'] = [
'sometimes', 'string',
Rule::in(['id', '-id', 'name', '-name', 'sorting', '-sorting']),
];FE’den gelen sort=most-read|newest|editor-pick|recently-updated bu
listede olmadığı için FormRequest 422 + translate key validation.custom.sort.*
→ lang/tr/validation.php’deki “Seçilen Sıralama geçersiz.” — bazı path’lerde
abort(500) döndürüyor.
Ayrıca controller içinde Locations::bottomSchoolsTypesLinks veya API
service sort=-view_count gibi DB kolon adını direkt API’ye yolladığında
API tarafı da aynı pattern’ı uyguluyor — -view_count, -created_at,
-is_helpfull, -updated_at hiçbiri API sort whitelist’inde yok.
Çözüm
FE param adını rename: sort → order. IndexArticleRequest
order için rule tanımlamadığı için pass through olur, BE ignore eder.
FE query string ve Alpine state order kullanır; controller mapping:
$orderMap = [
'newest' => '-id', // API whitelist'inde var, approximate En Yeni
];
$sortParam = $orderMap[$request->input('order')] ?? 'sorting';
$articleListRequest = $this->articleService->getArticleList(
..., orderBy: $sortParam, ...
);Diğer UI sort değerleri (most-read, editor-pick, recently-updated)
şimdilik default sorting kolonuna düşürülür — görsel pill aktif ama BE
gerçek sort yapmıyor. BE’nin sort whitelist’ine
-view_count/-created_at/-updated_at ekleyince map genişleyecek (bkz
BE-TODO §9a).
Ders
FormRequest’lerde HasPagination gibi ortak trait’ler varsa, sort param
ile uğraşan FE kodu:
- Trait whitelist’ini kontrol et — desteklenmeyen değer VAR MI?
- Varsa farklı bir query param adı seç (
order,sortByvb.) — validation tetiklenmez. - Controller’da gerekirse FE → API slug çevirimi yap.
BE ekibinden whitelist genişlemesi istenirken hangi değerlerin gerçekten DB kolonu olduğunu ve route/regex uyumunu teyit et.
Related
- 2026-04-16-responsive-ajax-partial-pattern — sort pill + AJAX refresh
- 2026-04-16-okul-770-responsive-article-be-gaps §9a — BE whitelist genişleme talebi