mami33
Öncelikle, Eloquent modelinizin üzerinden route model binding yapabilmek için modelinizi tanımlayın. Bu örnekte, "Location" adında bir model kullanacağımızı varsayalım:
// app/Models/Location.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Location extends Model
{
protected $fillable = ['slug', 'parent_id'];
public function parent()
{
return $this->belongsTo(Location::class, 'parent_id');
}
public function children()
{
return $this->hasMany(Location::class, 'parent_id');
}
}
Sonra, Controller'da URL parçalarını alarak ilgili veriyi çeken bir fonksiyon oluşturabilirsiniz:
// app/Http/Controllers/LocationController.php
namespace App\Http\Controllers;
use App\Models\Location;
class LocationController extends Controller
{
public function show($url)
{
$slugs = explode('/', $url);
$location = null;
foreach ($slugs as $slug) {
$location = $location
? $location->children()->where('slug', $slug)->first()
: Location::where('slug', $slug)->first();
if (!$location) {
abort(404);
}
}
return view('locations.show', compact('location'));
}
}
Son olarak, routes/web.php dosyasında bu fonksiyonu bir rota ile eşleştirebilirsiniz:
// routes/web.php
use App\Http\Controllers\LocationController;
Route::get('{url}', [LocationController::class, 'show'])->where('url', '.*');
Bu rota, herhangi bir URL parçasını alacak ve LocationController'daki "show" fonksiyonuna yönlendirecektir. "where" metodu ile URL'deki tüm karakterleri kabul etmesini sağlıyoruz.
Benim aklıma bu şekilde geldi ama işinize yarar mı bilmem @mgsmus abi olsaydı kesin bir cevap verirdi ama şansına 😃