Как указать город в url

avatar
nicolaa
1 июля 2021 в 15:42
58
1
0

Есть несколько URL

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


    public function checkUrl($slug) {
        if($slug == 'parts') {
            return redirect('moskva/parts');
        } else if($slug == 'part') {
            return redirect('moskva/part');
        }
    }
Источник

Ответы (1)

avatar
shaedrich
1 июля 2021 в 15:51
1

Вы можете использовать группу маршрутов с префиксом маршрута:

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

Если вам нужно, чтобы параметр города всегда присутствовал, даже если его нет в URL-адресе, вы можете передать значение по умолчанию действию контроллера следующим образом:

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

    }
}
nicolaa
1 июля 2021 в 16:25
1

Спасибо, дополнил ответ своим решением, по вашему ответу

shaedrich
1 июля 2021 в 17:19
0

Пожалуйста. Я также обновил свой ответ, чтобы он мог помочь вам с дополнительным значением по умолчанию.