Вы можете использовать столько параметров в маршруте, сколько пожелаете.
Все ваши параметры требуются в вашем маршруте и, конечно, "f", "m" и "g" также требуются, в противном случае указывает на другой маршрут.
Если вы хотите иметь необязательный параметр, он должен быть помещен в конец маршрута
В этом случае, я думаю, вы должны определить другой маршрут для доступа с помощью https://example.com/api/pro/f/33/m/1/g/2
Например:
Route::get('/pro/f/{f_id}/m/{m_id}/g/{g_id}', 'FunController@withAllParams');
Route::get('/pro/f/{f_id}/g/{g_id}', 'FunController@withoutM');
Route::get('/pro/f/{f_id}/g/{g_id}', 'FunController@withoutF');
Route::get('/pro/f/{f_id}', 'FunController@withoutG');
...
//etc
Если вы хотите использовать полностью универсальный маршрут и определить только один, я бы предпочел сделать это следующим образом:
Я не рекомендую делать это
Route::get('/pro/{id1?}/{id2?}/{id3?}', 'ExampleController@fullParams');
// Controller
public function fullParams(Request $request, ...$ids) {
$f_id = $g_id = $m_id = null;
foreach ($ids as $id) {
$letter_name = $id[0];
$var = $letter_name . '_id';
${$var} = substr($id, 1);
}
echo "f: $f_id, g: $g_id, m: $m_id";
}
// Example route
http://example.com/pro/f23/g22/m44 => "f: 23, g: 22, m: 44"
http://example.com/pro/f23/m44 => "f: 23, g: null, m: 44"
http://example.com/pro/m44 => "f: null, g: null, m: 44"
http://example.com/pro/m44/f33 => "f: 33, g: null, m: 44"
...
// you can do any route configuration you want
Надеюсь, это поможет вам