라라벨 페이지네이션에서 현재 페이지를 구하는 로직을 수정할 수 있을까?

라라벨을 사용하다가 `페이지네이션`에 대한 궁금증이 생겨서 코드를 조금 살펴보았습니다.

제가 코드를 살펴본 목적은 `페이지네이션에서 현재 페이지를 구하는 로직을 수정할 수 있을까?` 라는 부분이였습니다. 

답을 먼저 말하자면 `수정할 수 있다` 입니다.

Paginator::currentPageResolver 를 사용해 페이지네이션에서 현재 페이지를 구하는 로직을 새롭게 정의할 수 있습니다.

Paginator::currentPageResolver(function ($pageName = 'page') {
    $page = $this->app['request']->input($pageName);

    if (filter_var($page, FILTER_VALIDATE_INT) !== false && (int) $page >= 1) {
        return (int) $page;
    }

    return 1;
});
/**
 * Resolve the current page or return the default value.
 *
 * @param  string  $pageName
 * @param  int  $default
 * @return int
 */
public static function resolveCurrentPage($pageName = 'page', $default = 1)
{
    if (isset(static::$currentPageResolver)) {
        return call_user_func(static::$currentPageResolver, $pageName);
    }

    return $default;
}
/**
 * Set the current page resolver callback.
 *
 * @param\\Closure$resolver
 * @returnvoid
 */
public static function currentPageResolver(Closure $resolver)
{
		static::$currentPageResolver = $resolver;
}

 


위에 작성된 코드를 살펴보면서 `fillter_var` / `filter_input` 함수에 대해 알게 되었습니다.

 

출처: https://modernpug.github.io/php-the-right-way/#data_filtering

외부로 부터의 입력은 절대(절대로) 믿어서는 안됩니다.

외부에서 입력 받은 데이터를 사용하기 전에는 반드시 검증하고 위험한 요소를 제거해야 합니다.

filter_var()filter_input() 함수를 사용하여 텍스트에서 위험한 내용을 제거하고, 규칙(메일 주소 등)에 맞는지 검증할 수 있습니다.

if (filter_var($page, FILTER_VALIDATE_INT) !== false && (int) $page >= 1) {
    return (int) $page;
}

 

filter_var()filter_input() 함수가 보안에서 어떻게 쓰이는지 알고 싶다면 아래에 있는 글을 읽어보는 걸 추천한다.

https://www.hanbit.co.kr/media/channel/view.html?cms_code=CMS1044842637&cate_cd=

 

  • share