[英]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.