Я пытаюсь отфильтровать результаты из базы данных на странице, где пользователь не может выбрать ни один из дополнительных фильтров.
Я имею:
...
$out .= '<a class="filter-link" href="'.$_SERVER['REQUEST_URI'].'&age='.$ageId.'">';
...
Проблема в том, что, очевидно, он будет продолжать добавлять то же самое к строке запроса, т.е.
?page=1&&age=3&age=3&age=1&age=6
Как я могу заставить это работать должным образом, используя Laravel?
использование http_build_query
$out .= '<a class="filter-link" href="'.$_SERVER['REQUEST_URI'].'?'.http_build_query($_GET).'">';
Вы можете сделать что-то вроде:
$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
Надеюсь, это поможет.
В 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).'">';