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?
Laravel dinamik route?
8
●236
- 17-02-2023, 20:03:32ali_damar adlı üyeden alıntı: mesajı görüntüle
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:20hocam 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:10Bu 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.ali_damar adlı üyeden alıntı: mesajı görüntüle
- 19-02-2023, 10:46:18donem 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
<?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İşe Yaramadı Hocam Yine Aynı Durum.ali_damar adlı üyeden alıntı: mesajı görüntüle
Url İstediğim Gibi Fakat ikinci bir parametre olduğunda ilgili route yerine , route indexe yönleniyor