Необязательные параметры запроса URL Laravel / Lumen - PullRequest
0 голосов
/ 11 октября 2019

В Lumen я должен получить первый сегмент url как свойство $ source, а все остальные части - как путь $. Это решается следующим образом:

Route::get('/{source}/{path:.*}', 'HomeController@index');

При этом URL-адрес / database / path / to / folder будет анализироваться как $source = 'database'; и $path = 'path/to/folder'; Отлично!

Ночто, когда у меня тоже будут необязательные параметры запроса, например: /database/path/to/folder?attr1=foo&attr2=bar

Как определить, чтобы получить всю часть запроса в свойстве в качестве параметра маршрута?

1 Ответ

2 голосов
/ 11 октября 2019

Поскольку они являются необязательными и представляют собой строку запроса, вам не нужно определять их при регистрации маршрута.

Вы можете просто передать их при создании URL-адреса. Например:

Route::get('/{source}/{path:.*}', [
    'as' => 'home',
    'uses' => 'HomeController@index'
]);

Тогда вы можете сделать:

route('home', [
    'source' => 'database',
    'path' => 'path/to/folder',
    'attr1' => 'foo',
    'attr2' => 'bar'
]);

И результат будет:

http://example.com/database/path/to/folder?attr1=foo&attr2=bar

Обновление

Так как выЕсли вы хотите поместить все в параметр маршрута, вы можете получить то же самое, как это:

Route::get('{source}/{path:[a-z0-9/]+}[/{query:[a-z0-9=&]+}]', [
    'as' => 'home',
    'uses' => 'HomeController@index'
]);

Тогда вы сгенерируете маршрут следующим образом:

route('home', [
    'source' => 'database',
    'path' => 'path/to/folder',
    'query' => 'attr1=foo&attr2=bar'
]);

И результат будет:

http://example.com/database/path/to/folder/attr1=foo&attr2=bar`
...