Фильтры в URL с использованием Laravel

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

Я имею:

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

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

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

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

1

Решение

использование http_build_query

$out .= '<a class="filter-link" href="'.$_SERVER['REQUEST_URI'].'?'.http_build_query($_GET).'">';
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.

Отредактируйте в ответ на ваш комментарий:

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

Допустим, ваш пользователь пришел по URL-адресу, например:

http://example.com/some/route?page=3&возраст = 6&цвет = красный

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

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

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

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

$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&возраст = 5

Надеюсь, это поможет.

0

В Laravel 4 вы можете использовать Запрос класс для создания URL. Request :: URL () удаляет параметры запроса и Запрос :: 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).'">';
0
По вопросам рекламы [email protected]