Skip to content

Commit 91c7723

Browse files
committed
Initial commit
0 parents  commit 91c7723

File tree

5 files changed

+148
-0
lines changed

5 files changed

+148
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/vendor
2+
composer.lock

.php_cs.dist

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
// Reference: http://cs.sensiolabs.org/
4+
5+
return PhpCsFixer\Config::create()
6+
->setUsingCache(false)
7+
->setRiskyAllowed(true)
8+
->setRules([
9+
'@PHP70Migration' => true,
10+
'@PHP71Migration' => true,
11+
'@PSR2' => true,
12+
'@Symfony' => true,
13+
'array_syntax' => ['syntax' => 'short'],
14+
'increment_style' => ['style' => 'post'],
15+
'no_multiline_whitespace_before_semicolons' => true,
16+
'ordered_imports' => ['sortAlgorithm' => 'length'],
17+
'semicolon_after_instruction' => false,
18+
'strict_comparison' => true,
19+
'yoda_style' => false,
20+
]);

composer.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"name": "reinink/remember-query-strings",
3+
"type": "library",
4+
"description": "Laravel middleware that automatically remembers and restores query strings.",
5+
"keywords": ["laravel", "middleware", "query-strings"],
6+
"homepage": "https://github.com/reinink/remember-query-strings",
7+
"license": "MIT",
8+
"authors": [
9+
{
10+
"name": "Jonathan Reinink",
11+
"email": "[email protected]",
12+
"homepage": "https://reinink.ca"
13+
}
14+
],
15+
"autoload": {
16+
"psr-4": {
17+
"Reinink\\": "src"
18+
}
19+
}
20+
}

readme.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Remember Query Strings
2+
3+
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.
4+
5+
## Installation
6+
7+
You can install this package via Composer:
8+
9+
```
10+
composer require reinink/remember-query-strings
11+
```
12+
13+
## Setup
14+
15+
First register the route middleware in your `App\HttpKernel` class:
16+
17+
```php
18+
protected $routeMiddleware = [
19+
// ..
20+
'remember' => \Reinink\RememberQueryStrings::class,
21+
];
22+
```
23+
24+
## Usage
25+
26+
Now you can use this middleware just like [any other middleware](https://laravel.com/docs/middleware). For example, in your routes:
27+
28+
```php
29+
Route::get('users')->name('users')->uses('UsersController@index')->middleware('remember');
30+
```
31+
32+
Or in a controller:
33+
34+
```php
35+
class UserController extends Controller
36+
{
37+
public function __construct()
38+
{
39+
$this->middleware('remember')->only('index');
40+
}
41+
}
42+
```
43+
44+
## Opting out
45+
46+
If you'd like to visit a page without remembering the query strings, pass `?remember=no` to disable this behviour for that visit.
47+
48+
## Forgetting query strings
49+
50+
To forget previously remembered query strings, simply pass `?remember=forget`.

src/RememberQueryStrings.php

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?php
2+
3+
namespace Reinink;
4+
5+
use Closure;
6+
7+
class RememberQueryStrings
8+
{
9+
public function handle($request, Closure $next)
10+
{
11+
if ($request->wantsJson()) {
12+
return $next($request);
13+
}
14+
15+
if (empty($request->all())) {
16+
return $this->remembered($next, $request);
17+
}
18+
19+
if ($request->get('remember') === 'no') {
20+
return $next($request);
21+
}
22+
23+
if ($request->get('remember') === 'forget') {
24+
return $this->forget($next, $request);
25+
}
26+
27+
return $this->remember($next, $request);
28+
}
29+
30+
protected function remembered($next, $request)
31+
{
32+
$remembered = array_filter($request->session()->get('remember_query_strings.'.$request->route()->getName()) ?? []);
33+
34+
if ($remembered) {
35+
$request->session()->reflash();
36+
37+
return redirect(url($request->path()).'?'.http_build_query($remembered));
38+
}
39+
40+
return $next($request);
41+
}
42+
43+
protected function remember($next, $request)
44+
{
45+
$request->session()->put('remember_query_strings.'.$request->route()->getName(), array_filter($request->all()));
46+
47+
return $next($request);
48+
}
49+
50+
protected function forget($next, $request)
51+
{
52+
$request->session()->remove('remember_query_strings.'.$request->route()->getName());
53+
54+
return redirect(url($request->path()));
55+
}
56+
}

0 commit comments

Comments
 (0)