2014-11-15 3 views
1

Я пытаюсь отфильтровать результаты из базы данных на странице, где пользователь может выбрать ни один из фильтров.Фильтры по URL-адресу с использованием Laravel

у меня есть:

... 
$out .= '<a class="filter-link" href="'.$_SERVER['REQUEST_URI'].'&age='.$ageId.'">'; 
... 

Проблема в том, что, очевидно, он будет держать Добавляя же в строке запроса т.е.

?page=1&&age=3&age=3&age=1&age=6 

Как я могу получить эту работу должным образом, используя Laravel ?

+0

Как построен ваш сайт? Вы выбираете все эти фильтры на одной странице? Может быть, использовать флажки? – silkfire

+0

Возможно [http_build_query] (http://php.net/manual/en/function.http-build-query.php) может помочь вам? – lukasgeiter

+0

Спасибо, было бы лучше, чтобы связать каждый фильтр с одним и тем же контроллером, передав что-то вроде age = 3 и добавить его в переменную сеанса? – imperium2335

ответ

0

Вы можете сделать что-то вроде:

$params = Input::get(); 
$params['age'] = 'something'; # overwrite the age that was in the URL (if any) 
$params = http_build_query($params); 

$out .= '<a class="filter-link" href="'.[THE_PAGE_URL].'?'.$params">'; 

Обратите внимание, что [THE_PAGE_URL] должно быть в базовой форме без каких-либо параметров строки запроса в нем, как вы будете добавив их все снова, используя $ Params.

Редактировать в ответ на ваш комментарий:

Это позволяет добавление тех же Params к строке запроса каждый раз, когда ссылка нажата.

Произнесите пользователь прибывает в URL, как:

http://example.com/some/route?page=3&age=6&color=red

Если вы хотите ссылку, которая забывает все текущие параметры и определяет только возраст:

$out .= '<a class="filter-link" href="'.URL::to("some/route").'?age=5">'; 

выше следует приводят к: http://example.com/some/route?age=5

Или, если вы хотите ссылку, которая держит е текущий цвет фильтра (красный), но изменяет параметр возрастную и забывает параметр страницы целиком:

$params = Input::except('page'); # get all current parameters except page... 
$params['age'] = '5'; # overwrite the age parameter that was in the URL (if any) 
$params = http_build_query($params); # should return "color=red&age=5" 

$out .= '<a class="filter-link" href="'.URL::to('some/route').'?'.$params">'; 

выше должно привести: http://example.com/some/route?color=red&age=5

Надежда, что помогает.

+0

Это добавляет одни и те же параметры в строку запроса каждый раз, когда нажимается ссылка. – imperium2335

+0

@ imperium2335 См. Мой отредактированный ответ в ответ на ваш комментарий. – codebyren

0

В Laravel 4, вы можете использовать Request класс для создания URL. Запрос :: url() линяет параметры запроса и Request :: fullUrl() включает их. Ваш код будет выглядеть следующим образом:

$out .= '<a class="filter-link" href="'.Request::url().'?age='.$ageId.'">'; 

Если вам нужно добавить параметр страницу (если она существует), а затем использовать http_build_query:

$params['age'] = $ageId; 
$params['page'] = Input::get('page'); 
$out .= '<a class="filter-link" href="'.Request::url().'?'.http_build_query($params).'">'; 
Смежные вопросы