목록이 보여지는 블레이드 파일 1개만 수정
<div class="page-header">
@include('layouts.partial.header', [...])
@include('partial.search-form', [...])
</div>
<div class="text-right flex justify-end">
<div class="flex">
<!-- 있으면 이안에 같이 -->
@include('partial.list-order-form')
@include('partial.page-form')
</div>
</div>
paginate_qs_only()
인 경우: 'perPage' 추가<div class="paging-box">
@include('partial.pagination-simple', [
'paginator' => $model, 'appends' => paginate_qs_only([... , 'perPage'])
])
</div>
paginate_qs_except()
인 경우: 그대로 두기<div class="paging-box">
@include('partial.pagination-simple', [
'paginator' => $model, 'appends' => paginate_qs_except()
])
</div>
라라벨 페이징 appends에 urlencode 처리가 없어서 임의로 urlencode 처리 추가
function paginate_qs_only(array $keys)
예시
// 현재 url - htts://test.com/dev?field=all&q=hello&location=seoul
paginate_qs_only(['field', 'q', 'perPage']);
// htts://test.com/dev?field=all&q=hello&perPage=10
function paginate_qs_only(array $keys)
예시
// 현재 url - htts://test.com/dev?field=all&q=hello&location=seoul
paginate_qs_except(['perPage']);
// htts://test.com/dev?perPage=10
위에서 paginate_qs_only()
인 경우에는 'perPage' 추가하고 paginate_qs_except()
인 경우는 그대로 두었다.
왜 그런걸까?
paginate_qs_except()
는 지정된 쿼리스트링 외 나머지를 다 지워버린다. 그래서 남겨줄 조건을 지정하지 않고 다른 페이지로 넘어가면 원하는 조건의 목록에 대한 페이징 결과가 제대로 나오지 않는다.
예를 들어서,
paginate_qs_except(['perPage']);
여기서는 남겨줄 쿼리 스트링에 type을 넣지 않은 상태다. type=company인 목록을 페이지당 10개씩 보이도록 하면 첫 페이지에서는 type이 company에 해당하는 목록들이 잘 보인다.
// 현재는 type이 company인 목록들을 제대로 보여주고 있다.
https://test.com/dev?type=company&perPage=10
그런데 2번 페이지(또는 몇번째든 다른 페이지)로 넘어가는 순간 쿼리 스트링에서 type=company가 빠져버리게 된다. 따라서 type=company인 목록의 2번 페이지를 보여주는 게 아니라 전체 목록의 2번 페이지의 내용을 보여주게 된다.
// type에 대한 쿼리스트링이 제외되어 버리면서
// 전체 목록에 대한 2번 페이지를 보여주게 된다.
https://test.com/dev?perPage=10&page=2
처음에 paginate_qs_only
, paginate_qs_except
차이 생각안하고 무조건 paginate_qs_only
로 바꿔버렸다.
단순 문구수정이 아니고 기능 수정되거나 추가된 경우에는 무조건 다양한 상황을 먼저 테스트하고 코드리뷰 요청하자.