Посилання на сторінки Laravel, що не включають інші параметри GET


102

Я використовую Eloquent разом із класом Pagination Laravel 4.

Проблема: Якщо в URL-адресі є деякі параметри GET, наприклад:, http://site.com/users?gender=female&body=hotстворені посилання на сторінки розширення містять лише pageпараметр і більше нічого.

Шаблон леза

{{ $users->link() }}

Існує ->append()функція для цього, але коли ми не знаємо, скільки параметрів GET є, як ми можемо використовувати append()для включення інших параметрів GET в погіршені посилання без цілого куска ifкоду, що псує наш шаблон леза?

Відповіді:


121

EDIT: Коментар Коннора з відповіддю Мехді необхідний, щоб зробити цю роботу. Дякую обом за їх роз’яснення.

->appends()Ви можете прийняти масив як параметр, який ви можете передати Input::except('page'), що повинно зробити трюк.

Приклад:

return view('manage/users', [
    'users' => $users->appends(Input::except('page'))
]);

37
Зауважимо лише для інших Google, які йдуть цим шляхом - тепер це множина appends, а не append . Правильне прикування буде чимось на кшталт$query->appends($foo)->links();
Коннор Піт

6
Я виявив, що $query->appends(Input::except('page'))->links();працював краще. В іншому випадку змінна сторінки не оновлювалася при натисканні на сторінку. Laravel 4.1.24.
бітлатер

... і тоді я прокрутився вниз, щоб побачити рішення Мехді.
бітлатер

2
ЛАРАВЕЛ 5: {!! $myItems->appends(Input::except('page'))->render() !!}
ecairol

2
У laravel 5.2 ви повинні використовувати Запит замість Input
Christophvh

104

Я думаю, ви повинні використовувати цей код у Laravel 5. Також це буде працювати не тільки з параметром, pageале і з будь-якими іншими параметрами:

$users->appends(request()->input())->links();

Особисто я намагаюся уникати використання Facadesякомога більше. Використання глобальних хелперних функцій - менше коду та набагато елегантніше.

ОНОВЛЕННЯ:

Не використовуйте InputFacade, оскільки він застарілий у Laravel v6 +


2
Це працювало для laravel 5.6, використання прийнятого рішення відповіді спричинило для мене помилку.
Muhmmad Aziz

1
Я також успішно реалізував це на проекті 5.3; Я також вважаю за краще цей простий метод
kjones

3
Також я помітив, що вам не потрібно використовувати except('page')це рішення.
BakerStreetSystems

1
Дуже корисний. Спасибі
Viraj Amarasinghe

40

Пам'ятайте про це Input::all(), воно буде включати попередні ?page=значення знову і знову на кожну сторінку, яку ви відкриваєте!
наприклад, якщо ви перебуваєте у ?page=1вас, і ви відкриваєте наступну сторінку, вона відкриється. ?page=1&page=2
Отже, сторінка останнього значення буде сторінкою, яку ви бачите! не сторінка, яку ви хочете бачити

Рішення: використання Input::except(array('page'))


39

Ви можете використовувати

->appends(request()->query())

Приклад в контролері:

$users = User::search()->order()->with('type:id,name')
    ->paginate(30)
    ->appends(request()->query());

return view('users.index', compact('users'));

Приклад у поданні:

{{ $users->appends(request()->query())->links() }}

3
Це запропонований спосіб Мохамеда Саїда (співробітник Laravel), див.: Github.com/laravel/framework/issues/…
Рой

1
Я думаю, що це найкраща відповідь через те, що сказав @roy + кращі приклади. Також у нього є приклад Controller + View example.
Макі

2
Працювали для мене. +1
Маной Кумар

1
Це найкраще рішення, це спрацювало і для мене
Джитін

28

Не, append()але appends() так, правильна відповідь:

{!! $records->appends(Input::except('page'))->links() !!}

11

ЛАРАВЕЛ 5

Вид повинен містити щось на зразок:

{!! $myItems->appends(Input::except('page'))->render() !!}


5

Використовуйте цю конструкцію, щоб зберегти всі параметри входу, окрім сторінки

{!! $myItems->appends(Request::capture()->except('page'))->render() !!}

Чому?

1) ви знімаєте все, що додано для запиту

  $request->request->add(['variable' => 123]);

2) вам не потрібен $ request як вхідний параметр функції

3) ви виключаєте "сторінку"

PS) і працює для Laravel 5.1



4

для того, хто в laravel 5 або більше в лезо:

{{ $table->appends(['id' => $something ])->links() }}

ви можете отримати переданий товар

$passed_item=$request->id;

перевірити його

dd($passed_item);

ви повинні отримати $ щось значення


1

Laravel 7.x додав новий метод до пагінатора:

->withQueryString()

Таким чином, ви можете використовувати його так:

{{ $users->withQueryString()->links() }}

Для laravel нижче 7.x використовуйте:

{{ $users->appends(request()->query())->links() }}

0

Введіть також номер сторінки для пагинації. Щось на зразок цього

$currentPg = Input::get('page') ? Input::get('page') : '1';
    $boards = Cache::remember('boards'.$currentPg, 60, function(){ return WhatEverModel::paginate(15); });

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.