2014-11-11 4 views
0

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

Route::get('users/search/{type?}/{value}', 'Site\[email protected]'); 

Основная идея заключается в том, чтобы упростить поиск:

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

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

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

все в порядке.

ответ

1

Юст определяют 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\[email protected]'); 
0

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

Route::get('users/search/{type}/{value}', 'Site\[email protected]'); 
Route::get('users/search/{value}', 'Site\[email protected]'); 
0

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

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

Route::get('users/search/{value}/{type?}', 'Site\[email protected]'); 

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

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

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

Смежные вопросы