Laravel 4路由问题有多个和可选的参数

时间:2014-03-03 07:23:23

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

我正在使用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中的单个网址表单定义没有帮助。

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

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

非常感谢任何帮助!!

1 个答案:

答案 0 :(得分:0)

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

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