Проблемы маршрута Laravel 4 с несколькими и необязательными параметрами получения

Я создаю веб-сервис с Laravel 4, и у меня возникла проблема с необязательными параметрами. Рассмотрим сценарий ниже:

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

Ошибка, которая у меня была, заключалась в том, что определение формы с одним URL-адресом в 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. После того, как я создал несколько определений маршрута для разных перестановки и комбинации, которые отлично работают. Но если мои параметры получения больше, мы не сможем определить все перестановки. Поэтому я ищу лучший способ.

Любая помощь высоко ценится!!


person SAM    schedule 03.03.2014    source источник


Ответы (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;
 }
person awei    schedule 04.03.2014