Как использовать дополнительные значения в маршрутах Laravel?

0

У меня есть следующий маршрут:

Route::get('users/search/{type?}/{value}', 'Site\UserController@search');

Основная идея заключается в упрощении поиска:

если тип существует (имя, фамилия, адрес электронной почты и т.д.), найдите только это поле.
если нет - поиск везде.

Но когда я сделаю:

http://example.com/users/search/sdgfdfxg 

Броски Laravel

Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException 

С

http://example.com/users/search/name/sdgfdfxg

или

http://example.com/users/search/surname/sdgfdfxg

Все отлично.

Теги:
laravel-4
laravel-routing

3 ответа

1
Лучший ответ

Yust определяет 2 маршрута:

Route::get('users/search/{type}/{value}',function($type,$value){
    $app = app();
    $controller = $app->make('Site\UserController');
    $controller->callAction($app, $app['router'], 'search', $parameters = array($type,$value));
});
Route::get('users/search/{value}',function($value){
    $app = app();
    $controller = $app->make('Site\UserController');
    $controller->callAction($app, $app['router'], 'search', $parameters = array(null,$value));
});

Но все же самый простой вариант - изменить порядок определения ваших параметров. Установите необязательный параметр в конец URL-адреса:

Route::get('users/search/{value}/{type?}','Site\UserController@search');
0

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

Согласно документам, вы должны поставить рядом с ним вопросительный знак, например:

Route::get('users/search/{value}/{type?}', 'Site\UserController@search');

И в вашей функции поиска:

public function search($value, $type = null) {
    // Handle your code here...
}

Я знаю, что кажется странным иметь URL-адрес со значением сначала, а затем тип... Если вас это беспокоит, я предлагаю вам использовать ответ от Peh.

0

Вы можете зарегистрировать 2 маршрута. Один с "типом" и один без обработки обоих случаев.

Route::get('users/search/{type}/{value}', 'Site\UserController@searchByType');
Route::get('users/search/{value}', 'Site\UserController@search');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню