forked from reinink/remember-query-strings
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 91c7723
Showing
5 changed files
with
148 additions
and
0 deletions.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
/vendor | ||
composer.lock |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
<?php | ||
|
||
// Reference: http://cs.sensiolabs.org/ | ||
|
||
return PhpCsFixer\Config::create() | ||
->setUsingCache(false) | ||
->setRiskyAllowed(true) | ||
->setRules([ | ||
'@PHP70Migration' => true, | ||
'@PHP71Migration' => true, | ||
'@PSR2' => true, | ||
'@Symfony' => true, | ||
'array_syntax' => ['syntax' => 'short'], | ||
'increment_style' => ['style' => 'post'], | ||
'no_multiline_whitespace_before_semicolons' => true, | ||
'ordered_imports' => ['sortAlgorithm' => 'length'], | ||
'semicolon_after_instruction' => false, | ||
'strict_comparison' => true, | ||
'yoda_style' => false, | ||
]); |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
{ | ||
"name": "reinink/remember-query-strings", | ||
"type": "library", | ||
"description": "Laravel middleware that automatically remembers and restores query strings.", | ||
"keywords": ["laravel", "middleware", "query-strings"], | ||
"homepage": "https://github.com/reinink/remember-query-strings", | ||
"license": "MIT", | ||
"authors": [ | ||
{ | ||
"name": "Jonathan Reinink", | ||
"email": "[email protected]", | ||
"homepage": "https://reinink.ca" | ||
} | ||
], | ||
"autoload": { | ||
"psr-4": { | ||
"Reinink\\": "src" | ||
} | ||
} | ||
} |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
# Remember Query Strings | ||
|
||
Remember Query Strings is a Laravel middleware that automatically remembers and restores query strings. It does this by remembering the last query strings visited in the session. Later, when you visit that same route, if no query strings are provided, the middleware will automatically restore them from the sessions via a redirect. | ||
|
||
## Installation | ||
|
||
You can install this package via Composer: | ||
|
||
``` | ||
composer require reinink/remember-query-strings | ||
``` | ||
|
||
## Setup | ||
|
||
First register the route middleware in your `App\HttpKernel` class: | ||
|
||
```php | ||
protected $routeMiddleware = [ | ||
// .. | ||
'remember' => \Reinink\RememberQueryStrings::class, | ||
]; | ||
``` | ||
|
||
## Usage | ||
|
||
Now you can use this middleware just like [any other middleware](https://laravel.com/docs/middleware). For example, in your routes: | ||
|
||
```php | ||
Route::get('users')->name('users')->uses('UsersController@index')->middleware('remember'); | ||
``` | ||
|
||
Or in a controller: | ||
|
||
```php | ||
class UserController extends Controller | ||
{ | ||
public function __construct() | ||
{ | ||
$this->middleware('remember')->only('index'); | ||
} | ||
} | ||
``` | ||
|
||
## Opting out | ||
|
||
If you'd like to visit a page without remembering the query strings, pass `?remember=no` to disable this behviour for that visit. | ||
|
||
## Forgetting query strings | ||
|
||
To forget previously remembered query strings, simply pass `?remember=forget`. |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
<?php | ||
|
||
namespace Reinink; | ||
|
||
use Closure; | ||
|
||
class RememberQueryStrings | ||
{ | ||
public function handle($request, Closure $next) | ||
{ | ||
if ($request->wantsJson()) { | ||
return $next($request); | ||
} | ||
|
||
if (empty($request->all())) { | ||
return $this->remembered($next, $request); | ||
} | ||
|
||
if ($request->get('remember') === 'no') { | ||
return $next($request); | ||
} | ||
|
||
if ($request->get('remember') === 'forget') { | ||
return $this->forget($next, $request); | ||
} | ||
|
||
return $this->remember($next, $request); | ||
} | ||
|
||
protected function remembered($next, $request) | ||
{ | ||
$remembered = array_filter($request->session()->get('remember_query_strings.'.$request->route()->getName()) ?? []); | ||
|
||
if ($remembered) { | ||
$request->session()->reflash(); | ||
|
||
return redirect(url($request->path()).'?'.http_build_query($remembered)); | ||
} | ||
|
||
return $next($request); | ||
} | ||
|
||
protected function remember($next, $request) | ||
{ | ||
$request->session()->put('remember_query_strings.'.$request->route()->getName(), array_filter($request->all())); | ||
|
||
return $next($request); | ||
} | ||
|
||
protected function forget($next, $request) | ||
{ | ||
$request->session()->remove('remember_query_strings.'.$request->route()->getName()); | ||
|
||
return redirect(url($request->path())); | ||
} | ||
} |