【问题标题】:Laravel 4 Route issues with multiple and optional get params具有多个可选获取参数的 Laravel 4 Route 问题
【发布时间】:2014-03-03 07:23:22
【问题描述】:

我正在使用 Laravel 4 创建一个 Web 服务,但我遇到了可选参数的问题。 考虑以下场景::

http://webservices.example.com/city/mumbai/q/hospital/

这会为带有少量过滤器的搜索页面呈现结果,例如category and location 当然还有用于分页的参数。 现在这些过滤器参数可能是可选的,并且可能没有预定义的顺序,因为它取决于用户如何选择过滤器。所以可以说以下 URL 形式是可能的

http://webservices.example.com/city/mumbai/q/north/locality/myarea http://webservices.example.com/city/mumbai/q/north/locality/myarea/category/eye-hospital

http://webservices.example.com/city/mumbai/q/north/category/eye-hospital/locality/my-area

我遇到的错误是app/routes.php 中的单个 URL 表单定义没有帮助。

Route::get('/city/{city}/q/{q}/locality/{locality}/category/{category}',
        array('before' => 'check_city|check_query', 'uses' => 'SearchController@searchData'));

在提到 stackoverflow 之后,我看到了这个链接 Laravel 4 optional parameter 在我为不同的排列和组合创建了多个路由定义之后,它工作正常。但是,如果我的 get 参数更多,那么我们就不可能定义所有排列。所以我正在寻找更好的方法。

非常感谢任何帮助!

【问题讨论】:

    标签: web-services laravel-4 laravel-routing


    【解决方案1】:

    我根本没有测试这段代码,但你可以试试这样的:

    Route::get('{:params}', array('uses' => 'SearchController@searchData))->where('params', '.+');
    

    然后在你的 SearchController@searchData:

     public function searchData($search = null)
     {
          $params = $this->extractSearchParams($search);
    
          // do other stuff here with params
     }
    
     protected function extractSearchParams($search)
     {
          $parts = explode($search, '/');
    
          $params = array();
    
          foreach ($i = 0; $i < count($params); $i += 2)
          {
                $params[$parts[$i]] = $parts[$i + 1];
          }
    
          return $params;
     }
    

    【讨论】:

      猜你喜欢
      • 2014-06-08
      • 2015-11-17
      • 2014-06-23
      • 2014-05-04
      • 2015-12-12
      • 1970-01-01
      • 2015-01-14
      • 2016-02-29
      • 2014-06-30
      相关资源
      最近更新 更多