微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在url中指定城市

如何解决如何在url中指定城市

有多个网址

Route::get('part/{slug}',[App\Http\Controllers\PartsController::class,'part'])->name('part');
Route::get('parts','parts'])->name('parts');
Route::get('spare-cars/{marka?}/{model?}/{slug?}',[App\Http\Controllers\CarController::class,'spareCars'])->name('spare.cars');

我需要在每个url前面指定城市,例如

site.ru/ekaterinburg/part - 城市是动态表示的,如果没有城市则需要自动替换,例如

我们转到地址 site.ru/part - 重定向到城市的认值 - site.ru/moskva/part 与其他地址类似

如何做到这一点?

回答

谢谢@shaedrich

将所有路由添加到组中,并添加了对无城市链接的呼叫处理

Route::prefix('{city?}')->group(function() {
    Route::get('part/{slug}','part'])->name('part');
    Route::get('parts','parts'])->name('parts');
    Route::get('spare-cars/{marka?}/{model?}/{slug?}','spareCars'])->name('spare.cars');
    Route::get('/','checkUrl'])->name('checkUrl');
});


    public function checkUrl($slug) {
        if($slug == 'parts') {
            return redirect('moskva/parts');
        } else if($slug == 'part') {
            return redirect('moskva/part');
        }
    }

解决方法

您可以将 route grouproute prefix 一起使用:

Route::prefix('{city?}')->group(function() {
    Route::get('part/{slug}',[App\Http\Controllers\PartsController::class,'part'])->name('part');
    Route::get('parts','parts'])->name('parts');
    Route::get('spare-cars/{marka?}/{model?}/{slug?}',[App\Http\Controllers\CarController::class,'spareCars'])->name('spare.cars');
});

如果您需要 city 参数始终存在,即使它不在 URL 中,您可以将默认值传递给控制器​​操作,如下所示:

class PartsController extends Controller
{
    public function part($citry = 'moskva',$slug)
    {

    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。