[英]How to use optional values in Laravel routes?
我有以下路線:
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
一切順利。
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');
您可以注冊2條路線。 一種帶有“類型”,一種沒有處理兩種情況。
Route::get('users/search/{type}/{value}', 'Site\UserController@searchByType');
Route::get('users/search/{value}', 'Site\UserController@search');
首先,您永遠不能將可選參數放在第一位。 可選參數始終是函數或URL中的最后一個。
根據文檔,您必須在其旁邊放置一個問號,如下所示:
Route::get('users/search/{value}/{type?}', 'Site\UserController@search');
並在您的搜索功能中:
public function search($value, $type = null) {
// Handle your code here...
}
我知道先有一個值,然后是類型的URL似乎很奇怪。如果您對此感到不滿意,建議您使用Peh的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.