繁体   English   中英

如何在Laravel路由中使用可选值?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM