Laravel любой маршрут с необязательным параметром GET

#php #laravel

#php #laravel

Вопрос:

Я использую Laravel 8.1. В настоящее время у меня есть этот универсальный маршрут:

Route::any('/{any}', [IndexController::class, 'index'])->where('any', '.*');

Это отлично работает для всех URL-адресов. Однако, если я хочу прикрепить параметр GET для ID, я должен сделать это:

/api/products/view?id=1

Вместо этого я хочу сделать это:

/api/products/view/1

Моя подпись функции выглядит следующим образом:

public function index(Request $request) {}

Я хочу только ID в качестве необязательного параметра GET.

Комментарии:

1. Вы хотите получить id от своего $request или вы хотите сделать id необязательный в своем маршруте?

Ответ №1:

Вы можете добавить еще один необязательный параметр маршрута и указать шаблон в where для any параметра — «. *» не будет работать с необязательным параметром после любого

 Route::any('/{any}/{id?}', [IndexController::class, 'index'])->where('any', '[A-Za-z-_] ');

public function index(Request $request) 
{
    $id = $request->route('id');
}
 

Ответ №2:

Вы можете добавить другой параметр маршрута и получить его в контроллере, как у меня ниже:

Маршрут:

 Route::any('/{any}/{id}', [IndexController::class, 'index'])->where('any', '.*');
 

Контроллер:

 public function index($any, $id) 
{
    // $id will be passed in.
}