• 16-02-2023, 01:36:57
    #1
    Laravel üzerinde şöyle bir yapı kurmak istiyorum.

    site.com/routeadresi (2023 default veri)
    site.com/2022/routeadresi
    site.com/2021/routeadresi

    bu yapıda aradaki belirtilen yıl sadece config('donem') verisine eşit olacak. ve direk route adresine bağlanarak standart çalışmaya devam edecek. Hangi dönem yazılıysa sitedeki tüm url yönlendirmeleride o donem yılının urlsi ile yönlenecek.
    böyle bir yapıyı en optimize şekilde nasıl yapabilirim?
  • 17-02-2023, 17:04:10
    #2
    merhabalar, öncelikele route.php dosyasına /{tarih?}/ şeklinde bir prefix açmanız gerek. akabinde bu 2022, 2023 kısmınıysa blade üzerinden veya linki vereceğiniz kısma date("Y") komutunu eklerseniz isteğiniz karşılanmış olacaktır.
  • 17-02-2023, 20:03:32
    #3
    ali_damar adlı üyeden alıntı: mesajı görüntüle
    merhabalar, öncelikele route.php dosyasına /{tarih?}/ şeklinde bir prefix açmanız gerek. akabinde bu 2022, 2023 kısmınıysa blade üzerinden veya linki vereceğiniz kısma date("Y") komutunu eklerseniz isteğiniz karşılanmış olacaktır.
     Route::prefix('{donem?}')->middleware('donem')->group(function () { 
    //Tüm routeler burada
    }
    şu şekilde bir route Yapısı kurdum.
    model middlware de
        public function handle(Request $request, Closure $next)
        {
            $donem = $request->segment(1);
            if (in_array($donem, config('donemler'))) {
                config(['donem'=>$donem]);
                URL::defaults(['donem' => config('donem')]);
                return $next($request);
            }
            if (!in_array($donem, config('donemler'))) {
                $segments = array_merge([2023],$request->segments());
                URL::defaults(['donem' => '2023']);
                return redirect(implode('/', $segments));
            }
        }
    Bu Şekilde İstediğim Yapıyı kurdum fakat şöyle bir sıkıntı var. Ben Yıl Parametresi vermediğim zaman Direk site.com Şeklinde girildiğinde 2023 eğer yıl verilmişse site.com/yıl şeklinde Açılmasını İstiyorum. yani site.com/2023 yerine site.com şeklinde bir url istiyorum. Bununla ilgili Çok Fazla deneme yaptım ama çözemedim.
  • 17-02-2023, 23:14:20
    #4
    hocam bunun için ikinci bir middleware açıp, donem_kontrol gibi
    buradaki kodlar şu şekilde olabilir.

    DonemKontrolMiddleware

    $segments = $request->segments();
    $donem = 2023;
    $key = array_search($donem, $segments);

    if(isset($key)){
    unset($segments[$key]);
    }
    return redirect(implode('/', $segments)); // sizin koddan alıntı.




    hocam denemedim ama böyle bir denersiniz. olmazsa biraz daha kuracalarız
  • 18-02-2023, 14:24:10
    #5
    ali_damar adlı üyeden alıntı: mesajı görüntüle
    hocam bunun için ikinci bir middleware açıp, donem_kontrol gibi
    buradaki kodlar şu şekilde olabilir.

    DonemKontrolMiddleware

    $segments = $request->segments();
    $donem = 2023;
    $key = array_search($donem, $segments);

    if(isset($key)){
    unset($segments[$key]);
    }
    return redirect(implode('/', $segments)); // sizin koddan alıntı.




    hocam denemedim ama böyle bir denersiniz. olmazsa biraz daha kuracalarız
    Bu Mantığı Düşünmüştüm Ama Şöyle Bir Sıkıntı Var. İlk Middleware'de donem değişkeni yoksa 2023'lü url ye yönlendiriyoruz. İkinci Middlwarede 2023 ü siliyoruz ve yenşden yönlendirme yapıyoruz. Yeniden Yönlendirme yaptığımız için tekrar ilk middlearede 2023 Ekliyor ve loop'a Düşüyor.
  • 19-02-2023, 01:09:05
    #6
    Hocam döngüye girmemesi için sessiona atarsanız ve bunu dönem ( ilk ) middleware da.

    if( session('donem') != null ){
    return $next($request);
    }
    Yaparsanız en üstte yer alacak şekilde koşulu daha sağlıklı olur bu şekilde sonsuz döngüde kalmaz Max 2 kez yönlendirir
  • 19-02-2023, 10:46:18
    #7
    donem middlware
    <?php
    namespace App\Http\Middleware;
    use Closure;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\URL;
    use Illuminate\Support\Facades\Session;
    class donem {
        public function __construct(){}
        public function handle(Request $request, Closure $next)
        {
            $donem = $request->segment(1);
            
            if( Session::get('donem') != null ){
                URL::defaults(['donem' => '/']);
                return $next($request);
            }
            
            if (in_array($donem, config('donemler'))) {
                config(['donem'=>$donem]);
                Session::put('donem', $donem);
                URL::defaults(['donem' => config('donem')]);
                return $next($request);
            }
            if (!in_array($donem, config('donemler'))) {
                    $segments=$request->segments();
                    $segments[]=2023;
                    return redirect(implode('/', $segments));
            }
            
    
        }
    }
    donemcurrent(2. middlware) middlware
    <?php
    namespace App\Http\Middleware;
    use Closure;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Session;
    class donemcurrent {
        public function __construct(){}
        public function handle(Request $request, Closure $next)
        {
            if( Session::get('donem') == null ){
                $segments = $request->segments();
                $donem = 2023;
                $key = array_search($donem, $segments);
                if(isset($key)){
                    unset($segments[$key]);
                }
                Session::put('donem', $donem);
                return redirect(implode('/', $segments));
            }else{
                return $next($request);
            }
        }
    }
    web.php route
     Route::prefix('{donem?}')->middleware(['donem','donemcurrent'])->group(function () { 
            Route::get('/', [App\Http\Controllers\front\indexController::class,'index'])->name('index');
            Route::get('/liste', [App\Http\Controllers\front\indexController::class,'index'])->name('index');
            Route::group(['namespace'=>'satis','prefix'=>'satis','as'=>'satis.'],function(){
                Route::get('/', [App\Http\Controllers\front\satis\indexController::class,'index'])->name('index');
                Route::post('/', [App\Http\Controllers\front\satis\indexController::class,'post'])->middleware('XSS')->name('post');
                Route::get('/liste', [App\Http\Controllers\front\satis\indexController::class,'list'])->name('list');
                Route::get('/siparis', [App\Http\Controllers\front\satis\orderController::class,'index'])->name('order');
                Route::get('/detay/{hayvan_id}', [App\Http\Controllers\front\satis\indexController::class,'detail'])->name('detail');
                Route::get('/siparis/liste', [App\Http\Controllers\front\satis\orderController::class,'list'])->name('orderList');
                Route::post('/siparis/ekle', [App\Http\Controllers\front\satis\orderController::class,'post'])->name('orderPost');
                Route::post('/siparis/onay', [App\Http\Controllers\front\satis\orderController::class,'orderCheck'])->name('orderCheck');
            });   
    });
    Bu Şekilde Link Yapısını istediğim gibi alabiliyorum ama sanırım donem prefixinden dolayı doğru route'a Bağlanamıyor site.com/satis şeklinde girdiğimde'de index sayfası açılıyor.
  • 19-02-2023, 16:10:39
    #8
    <?php
    namespace App\Http\Middleware;
    use Closure;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\URL;
    use Illuminate\Support\Facades\Session;
    class donem {
        public function __construct(){}
        public function handle(Request $request, Closure $next)
        {
            $donem = $request->segment(1);
            
            if( Session::get('donem') != null ){
                URL::defaults(['donem' => '/']);
                return $next($request);
            }
            
            if (in_array($donem, config('donemler'))) {
                config(['donem'=>$donem]);
                Session::put('donem', $donem);
                URL::defaults(['donem' => config('donem')]);
                return $next($request);
            }
            if (!in_array($donem, config('donemler'))) {
                return $next($request);
            }
            
     
        }
    }

    birde bu şekilde deneseniz hocam size zahmet.
  • 19-02-2023, 19:38:07
    #9
    ali_damar adlı üyeden alıntı: mesajı görüntüle
    <?php
    namespace App\Http\Middleware;
    use Closure;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\URL;
    use Illuminate\Support\Facades\Session;
    class donem {
        public function __construct(){}
        public function handle(Request $request, Closure $next)
        {
            $donem = $request->segment(1);
            
            if( Session::get('donem') != null ){
                URL::defaults(['donem' => '/']);
                return $next($request);
            }
            
            if (in_array($donem, config('donemler'))) {
                config(['donem'=>$donem]);
                Session::put('donem', $donem);
                URL::defaults(['donem' => config('donem')]);
                return $next($request);
            }
            if (!in_array($donem, config('donemler'))) {
                return $next($request);
            }
            
     
        }
    }
    birde bu şekilde deneseniz hocam size zahmet.
    İşe Yaramadı Hocam Yine Aynı Durum.
    Url İstediğim Gibi Fakat ikinci bir parametre olduğunda ilgili route yerine , route indexe yönleniyor