Links de paginação do Laravel não incluindo outros parâmetros GET


102

Estou usando o Eloquent junto com a classe de paginação do Laravel 4.

Problema: quando existem alguns parâmetros GET na URL, por exemplo http://site.com/users?gender=female&body=hot:, os links de paginação produzidos contêm apenas o pageparâmetro e nada mais.

Modelo de lâmina

{{ $users->link() }}

Há uma ->append()função para isso, mas quando não sabemos quantos parâmetros GET existem, como podemos usar append()para incluir os outros parâmetros GET nos links paginados sem que um pedaço inteiro de ifcódigo atrapalhe nosso modelo blade?

Respostas:


121

EDIT: O comentário de Connor com a resposta de Mehdi são necessários para fazer este trabalho. Obrigado a ambos pelos esclarecimentos.

->appends()pode aceitar um array como parâmetro, você pode passar Input::except('page'), isso deve resolver o problema.

Exemplo:

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

37
Apenas para observar outros Googlers que vêm para cá - agora é plural appends, não append . O encadeamento correto seria algo como$query->appends($foo)->links();
Connor Peet

6
Achei que $query->appends(Input::except('page'))->links();funcionou melhor. Caso contrário, a variável da página não foi atualizada quando você clicou em uma página. Laravel 4.1.24.
bitlather

... e então rolei para baixo para ver a solução de Mehdi.
bitlather

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

2
No laravel 5.2 você deve usar Solicitação em vez de Entrada
Christophvh

104

Acho que você deve usar este código no Laravel 5. Além disso, isso funcionará não apenas com o parâmetro, pagemas também com qualquer outro parâmetro (s):

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

Pessoalmente, tento evitar usar Facadeso máximo que posso. Usar funções auxiliares globais é menos código e muito elegante.

ATUALIZAR:

Não use o InputFaçade, pois ele está obsoleto no Laravel v6 +


2
Isso funcionou para o laravel 5.6, usar a solução de resposta aceita causou um erro para mim.
Muhmmad Aziz

1
Eu também implementei isso com sucesso em um projeto 5.3; Eu também prefiro este método simples
kjones de

3
Além disso, percebi que você não precisa usar except('page')com esta solução.
BakerStreetSystems

1
Muito útil. Obrigado
Viraj Amarasinghe

40

Esteja ciente de que Input::all()ele incluirá os ?page=valores anteriores repetidamente em cada página que você abrir!
por exemplo, se você estiver em ?page=1e abrir a próxima página, ela será aberta. ?page=1&page=2
Portanto, o último valor que a página terá será a página que você vê! não a página que você quer ver

Solução: use Input::except(array('page'))


39

Você poderia usar

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

Exemplo no controlador:

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

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

Exemplo na visualização:

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

3
Esta é a forma sugerida por Mohamed Said (funcionário do Laravel), consulte: github.com/laravel/framework/issues/…
Roy

1
Acho que essa é a melhor resposta por causa do que disse @roy + exemplos melhores. Também tem o exemplo em Controller + View example.
Maky

2
Funcionou para mim. +1
Manoj Kumar

1
Esta é a melhor solução, funcionou para mim também
Jithin

28

Não, append()mas appends() então, a resposta certa é:

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

11

LARAVEL 5

A visualização deve conter algo como:

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


5

Use esta construção, para manter todos os parâmetros de entrada, exceto a página

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

Por quê?

1) você retira tudo o que adicionou a uma solicitação como essa

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

2) você não precisa de $ request como parâmetro de entrada para a função

3) você está excluindo "página"

PS) e funciona para o Laravel 5.1


4

Incluir na sua página de visualização

 $users->appends(Input::except('page'))

4

para quem em laravel 5 ou maior em lâmina:

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

você pode obter o item aprovado com

$passed_item=$request->id;

teste com

dd($passed_item);

você deve obter o valor de $ alguma coisa


1

Laravel 7.x adicionou um novo método ao paginador:

->withQueryString()

Então você pode usá-lo como:

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

Para laravel abaixo de 7.x, use:

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

0

Passe o número da página para paginação também. Algo assim

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.