Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
reinink committed Apr 2, 2019
0 parents commit 91c7723
Show file tree
Hide file tree
Showing 5 changed files with 148 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/vendor
composer.lock
20 changes: 20 additions & 0 deletions .php_cs.dist
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,
]);
20 changes: 20 additions & 0 deletions composer.json
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"
}
}
}
50 changes: 50 additions & 0 deletions readme.md
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`.
56 changes: 56 additions & 0 deletions src/RememberQueryStrings.php
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()));
}
}

0 comments on commit 91c7723

Please sign in to comment.