Могу ли я использовать тонну необходимых параметров в Roure - PullRequest
1 голос
/ 13 апреля 2020

Я использую этот синтаксис в маршруте

Route::get('/pro/f/{f_id}/m/{m_id}/g/{g_id}', 'FunController@index');

И я хочу использовать это без "f", например

https://example.com/api/pro/m/1/g/2 - не найдено

https://example.com/api/pro/f/33/m/1/g/2 - это работает

Я хочу использовать оба варианта для этого маршрута.

Как я могу это сделать?

1 Ответ

1 голос
/ 13 апреля 2020

Вы можете использовать столько параметров в маршруте, сколько пожелаете.

Все ваши параметры требуются в вашем маршруте и, конечно, "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

Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...