Laravel 4 Проблемы маршрута с несколькими и необязательными параметрами получения
Я создаю web-сервис с Laravel 4, и я столкнулся с проблемой с необязательными параметрами.
Рассмотрим следующий сценарий:
http://webservices.example.com/city/mumbai/q/hospital/
Что дает результаты для страницы поиска с несколькими фильтрами, например. category and location
и параметры forcourse для разбивки на страницы.
Теперь эти параметры фильтра могут быть необязательными и могут не иметь заранее заданного порядка, поскольку он зависит от того, как пользователь может выбирать фильтры. Таким образом, можно сказать, что возможны следующие формы 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' => '[email protected]'));
после ссылки на stackoverflow я увидел эту ссылку необязательный параметр Laravel 4
После того, как я создал несколько определений маршрутов для разных перестановок и комбинации, что работает нормально. Но если мои параметры получения больше, то на самом деле невозможно определить все перестановки. Поэтому я ищу лучший способ.
Любая помощь очень ценится!
Ответы
Ответ 1
Я вообще не тестировал этот код, но вы могли бы попробовать что-то вроде этого:
Route::get('{:params}', array('uses' => '[email protected]))->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;
}