Last active
April 22, 2016 08:56
-
-
Save alwarren/b8f285216bf8ec656998045ae9fe3841 to your computer and use it in GitHub Desktop.
A Laravel 5.2 trait that stores a value in the session that can be used with a form select to set the per page value for a length aware paginator.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Traits; | |
use Illuminate\Http\Request; | |
/** | |
* A Laravel 5.2 trait that stores a value in the session that can be used with | |
* a form select to set the per page value for a length aware paginator. | |
* | |
* @author Al Warren | |
* | |
*/ | |
trait PerPageTrait | |
{ | |
/** | |
* Determin if the session key needs to be removed | |
* | |
* @param string $key | |
* @param mixed $perPage | |
* @param number $perPageDefault | |
* | |
* @return mixed | |
*/ | |
public function requestResetsPerPage($key, $perPage, $perPageDefault) { | |
$result = false; | |
$perPage = is_numeric( $perPage ) ?( int ) $perPage : $perPage; | |
if($perPage == $perPageDefault || request()->exists( $key ) && empty( $perPage )) | |
$result = true; | |
return $result; | |
} | |
/** | |
* Validate the request value. | |
* | |
* @param mixed $perPage | |
* @param mixed $perPageDefault | |
* @param number $maxPerPage | |
* | |
* @return mixed | |
*/ | |
public function validPerPageRequest($perPage, $perPageDefault, $maxPerPage) { | |
if(is_numeric( $perPage )) | |
$perPage =( int ) substr( $perPage, 0, strlen(( string ) $maxPerPage ) ); | |
if(is_numeric( $perPage ) && $perPage > $maxPerPage) | |
$perPage = 'all'; | |
if($perPage && ! is_numeric( $perPage ) && $perPage !== 'all') | |
return false; | |
return $perPage; | |
} | |
/** | |
* Store the request value in a session if needed and return | |
* the value, an existing session value, or a default. | |
* | |
* @param mixed $perPageDefault | |
* @param number $maxPerPage | |
* @param string $key | |
* | |
* @return mixed | |
*/ | |
public function perPageRequest($perPageDefault = 50, $maxPerPage = 49, $key = 'per_page') { | |
$perPageRequest = strtolower( trim( request()->get( $key ) ) ); | |
if($this->requestResetsPerPage( $key, $perPageRequest, $perPageDefault )) | |
session()->forget( $key ); | |
$perPage = $this->validPerPageRequest( $perPageRequest, $perPageDefault, $maxPerPage ); | |
if(false === $perPage) | |
abort( 400, 'Bad Per Page Request' ); | |
$sessionPerPage = request()->session()->get( $key ); | |
if($sessionPerPage && empty( $perPage )) | |
return $sessionPerPage; | |
if($perPage !== $perPageDefault) | |
request()->session()->put( $key, $perPage ); | |
return( $perPage ?: $perPageDefault ); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Controller:
Routes:
Form: