Arkadaşlar merhaba.
Laravele özel bir dil paketi hazırladım.
Gelişmiş bir metod ile her isteği analiz edip mevcut dili belirliyor. prefix ve slug değerleri her dilde farklı ve veritabanında tutuluyor.
Başınızı ağrıtmak istemiyorum. Sistem güzel çalışıyor fakat tek problemim şu.
Kernelde bu middlewareyi tanımlamama rağmen routelerin tanımlanmasından sonra çalışıyor.
O sebeple dil sınıfından hep varsayılan dilin slugları prefixleri geliyor.
Laravelde yeni olduğum için bir türlü çözemedim. event-listner da denedim olmadı.
Nasıl bu sıralamayı düzeltebilirim?
İlk servis çalışıp dili belirlemeli, sonra routeler oluşmalı.
Bilgisi olan yardımcı olursa mutlu olurum.
Çok teşekkürler.
Laravel dinamik routeler
6
●192
- 16-04-2025, 23:31:11
- 16-04-2025, 23:38:30Eğer dil prefix'ine göre route'ları dinamik olarak değiştirmek istiyorsan, RouteServiceProvider içinde dili önceden belirlemen gerekebilir:
// app/Providers/RouteServiceProvider.php public function boot() { parent::boot(); // Kullanıcıdan gelen isteğe göre dili tespit et $locale = $this->detectLocaleFromRequest(); App::setLocale($locale); } protected function detectLocaleFromRequest() { // Örneğin, URL prefix'inden dil kodunu çıkar $prefix = request()->segment(1); // veritabanında prefix'e göre dili bul $locale = DB::table('languages')->where('prefix', $prefix)->value('code') ?? config('app.locale'); return $locale; }
- 16-04-2025, 23:41:33Mhmmd adlı üyeden alıntı: mesajı görüntüle
prependMiddleware ile veriyorum. onun yerine direkt dil belirleme metodunu mu çalıştırmalıyım acaba?
edit:
Hocam teşekkür ederim. Fikriniz işe yaradıService providerda direkt çalıştırdım metodu şu an istediğim gibi çalışıyor. Sağ olun.
- 16-04-2025, 23:44:08DOS adlı üyeden alıntı: mesajı görüntüle
- x.com/hello-world
- x.com/en/hello-world
- x.com/en/blog/hello-world
- x.com/blog/hello-world
- x.com/news/hello-world
metod sonradan çalıştığı için şu anda ana dilin verileri geliyor varsayılan olarak. - 19-04-2025, 05:52:23sacilannurlar adlı üyeden alıntı: mesajı görüntüle
Bunun sebebi Laravel'in kendi iç mekanizmasındaki Routing olayları ile ilgisi vardır. Sorun şu ki daha öncesin de bu konuyu çözmek için izlediğim yaklaşımlardan biri Laravel'in RouteRegistrar kullanarak rotaları yüklediği Routing paketinin içerisinde bir RoutingServiceProvider adında sağlayıcı mevcuttur bu sağlayıcının içerisinde rotalar ile ilgili ön yükleme alanını ve geri çağrı işlevlerini göreceksiniz o geri çağrı işlevlerinde rotaların her yeniden ön yüklenmesi ile birlikte sağlayıcının içerisinde gerekli düzenlemeleri de yapmasını sağlarsanız rotalardaki slug, ön ek gibi değişikliklerin tamamı rotalar değiştikçe değişecektir fakat sorun şunun ile bitmeyecektir. Laravelin kendi mekanizması bir önceki bağlantıyı ziyaret ederken yine size asıl tercih etmiş olduğunuz dilin bağlantısını sağlayacaktır değiştirirken bunu aşmak için URL cephesini kullanarak bir önceki rota takma adını kullanırsanız url bazlı olarak değerlendirmeyeceği için yönlendirmeler için her zaman doğru ve yeni dile geçildiğinde yeni dilin verilerini çekecektir, kolaylıklar dilerim.
O Sağlayıcı haricinde bir müdahale yaparsanız hep uygulama rotaları yüklendikten sonra değerlendirilecektir bu yüzdende geçerli olmayacaktır bilginize, fakat o sağlayıcı üzerinde değişiklik yaparsanız istediğiniz süreç aktif ve düzenli bir şekilde çalışacaktır.