duanqie5741 2014-11-11 08:05
浏览 110
已采纳

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

I have the following route:

Route::get('users/search/{type?}/{value}', 'Site\UserController@search');

The main idea is to simplify the search:

if type exists (name, surname, email and etc.) search only by that field.
if not - search everywhere.

But when I do:

http://example.com/users/search/sdgfdfxg 

Laravel throws

Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException 

With

http://example.com/users/search/name/sdgfdfxg

or

http://example.com/users/search/surname/sdgfdfxg

everything is fine.

  • 写回答

3条回答 默认 最新

  • dongzhuandian3292 2014-11-11 08:14
    关注

    Yust define 2 routes:

    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));
    });
    

    But still the easiest option is to change the order of defining you're parameters. Set the optional option to the end of the url:

    Route::get('users/search/{value}/{type?}','Site\UserController@search');
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥100 iOS开发关于快捷指令截屏后如何将截屏(或从截屏中提取出的文本)回传给本应用并打开指定页面
  • ¥15 unity连接Sqlserver
  • ¥15 图中这种约束条件lingo该怎么表示出来
  • ¥15 VSCode里的Prettier如何实现等式赋值后的对齐效果?
  • ¥15 流式socket文件传输答疑
  • ¥20 keepalive配置业务服务双机单活的方法。业务服务一定是要双机单活的方式
  • ¥50 关于多次提交POST数据后,无法获取到POST数据参数的问题
  • ¥15 win10,这种情况怎么办
  • ¥15 如何在配置使用Prettier的VSCode中通过Better Align插件来对齐等式?(相关搜索:格式化)
  • ¥100 在连接内网VPN时,如何同时保持互联网连接