我有以下路线:
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
一切都很好。
答案 0 :(得分: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');
答案 1 :(得分:0)
您可以注册2条路线。一个有'类型'一个没有处理这两个案件。
Route::get('users/search/{type}/{value}', 'Site\UserController@searchByType');
Route::get('users/search/{value}', 'Site\UserController@search');
答案 2 :(得分:0)
首先,你永远不能在第一个参数中创建一个可选参数。可选参数始终是函数或URL中的最后一个参数。
根据文档,您必须在旁边放一个问号,如下所示:
Route::get('users/search/{value}/{type?}', 'Site\UserController@search');
在您的搜索功能中:
public function search($value, $type = null) {
// Handle your code here...
}
我知道首先有一个带有值的URL,然后是类型......这似乎很奇怪 如果你对此感到困扰,我建议你使用Peh的答案。