라라벨
라라벨 페이지네이션에서 현재 페이지를 구하는 로직을 수정할 수 있을까?
라라벨을 사용하다가 `페이지네이션`에 대한 궁금증이 생겨서 코드를 조금 살펴보았습니다.
제가 코드를 살펴본 목적은 `페이지네이션에서 현재 페이지를 구하는 로직을 수정할 수 있을까?` 라는 부분이였습니다.
답을 먼저 말하자면 `수정할 수 있다` 입니다.
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=
0개 댓글