PHPackages                             imanghafoori/laravel-middlewarize - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. imanghafoori/laravel-middlewarize

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

imanghafoori/laravel-middlewarize
=================================

Use laravel middlewares on any method calls in your app

v1.1.11(1y ago)1134.5k51MITPHPPHP 7.3.\*|7.4.\*|^8.0

Since Aug 8Pushed 1y ago2 watchersCompare

[ Source](https://github.com/imanghafoori1/laravel-middlewarize)[ Packagist](https://packagist.org/packages/imanghafoori/laravel-middlewarize)[ Docs](https://github.com/imanghafoori1/laravel-middlewarize)[ RSS](/packages/imanghafoori-laravel-middlewarize/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (5)Dependencies (3)Versions (21)Used By (1)

Laravel Middlewarize
=====================

[](#laravel-middlewarize)

 🎀 Chain of Responsibility Design Pattern In Laravel Apps 🎀
------------------------------------------------------------

[](#-----ribbonchain-of-responsibility-design-pattern-in-laravel-apps-----ribbon)

 [![Onion](https://user-images.githubusercontent.com/6961695/63593162-a2fafe80-c5c8-11e9-8aba-f9f6aa298c25.png)](https://user-images.githubusercontent.com/6961695/63593162-a2fafe80-c5c8-11e9-8aba-f9f6aa298c25.png)

 [![Maintainability](https://camo.githubusercontent.com/34325fdf9d3023091efe12af83ae146164e43623/68747470733a2f2f6170692e636f6465636c696d6174652e636f6d2f76312f6261646765732f32363536303962613535356435666430363536302f6d61696e7461696e6162696c697479)](https://codeclimate.com/github/imanghafoori1/laravel-middlewarize/maintainability)[![Quality Score](https://camo.githubusercontent.com/359ea3abaa25e5294e7f040d56e4c3b621fd1270/68747470733a2f2f696d672e736869656c64732e696f2f7363727574696e697a65722f672f696d616e676861666f6f7269312f6c61726176656c2d6d6964646c65776172697a652e7376673f7374796c653d666c61742d737175617265)](https://scrutinizer-ci.com/g/imanghafoori1/laravel-middlewarize)[![Latest Stable Version](https://camo.githubusercontent.com/6d0dcff30fd48713efa4bebdbef64d7b15f76250/68747470733a2f2f706f7365722e707567782e6f72672f696d616e676861666f6f72692f6c61726176656c2d6d6964646c65776172697a652f762f737461626c65)](https://packagist.org/packages/imanghafoori/laravel-middlewarize)[![Code Coverage](https://camo.githubusercontent.com/ea575cf7a29f4a678075253cddc49e02d118c87d/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f696d616e676861666f6f7269312f6c61726176656c2d6d6964646c65776172697a652f6261646765732f636f7665726167652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/imanghafoori1/laravel-middlewarize/?branch=master)[![Software License](https://camo.githubusercontent.com/d885b3999bb863974fb67118174bb0402d089a89/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e7376673f7374796c653d726f756e642d737175617265)](/imanghafoori1/laravel-middlewarize/blob/master/LICENSE.md)

---

**You can use middlewares to decorate any method calls on any object.**

```
// Normal Call:
$myObj->myMethod();

// Decorated Call:
$myObj
    ->middlewares([...])
    ->myMethod():
```

### 🔥 Installation:

[](#fire-installation)

```
composer require imanghafoori/laravel-middlewarize

```

#### ▶️ How to use:

[](#arrow_forward-how-to-use)

Put the `\Imanghafoori\Middlewarize\Middlewarable` trait on your class.

For example consider a simple repository class:

```
class UserRepository
{
    use Middlewarable;     //   find($id);
}
```

Easy Peasy Yeah ?!

You totally separate the cache concern into a new class.

So let's compare...

#### Before:

[](#before)

Before utilizing middlewares our code was like this:

```
public function show($id, UserRepository $repo)
{
    if (Cache::has('user.'.$id)) {
        return Cache::get('user.'.$id); // find($id)
    }

    $value = $repo->find($id);  //   middleware('cacher@MyHandle1:fooKey,60')  // find($id);
}
```

#### ▶️ Multiple middlewares:

[](#arrow_forward-multiple-middlewares)

```
public function show($id, UserRepository $repo)
{
    $cachedUser = $repo->middleware(['middle1', 'middle2', 'middle3'])->find($id);
}
```

The order of execution is like that:

 Start ===&gt; ( middle1 -&gt; middle2 -&gt; middle\_3 (  **find**  ) middle\_3 -&gt; middle2 -&gt; middle1 ) ===&gt; result !!!

#### ▶️ Middlewares on facades ?!

[](#arrow_forward-middlewares-on-facades-)

You wanna use facades to call the repo ?! No problem.

```
$cachedUser = UserRepositoryFacade::middleware('cacher:fooKey,60 seconds')->find($id);
```

#### ▶️ Objects as middlewares:

[](#arrow_forward-objects-as-middlewares)

You can also use objects as middlewares for more eloborated scenarios.

```
$obj = new CacheMiddleware('myCacheKey', etc...);   //   middleware($obj)->find($id);
```

#### ▶️ Middleware on static methods:

[](#arrow_forward-middleware-on-static-methods)

```
User::find($id);       //  find($id); //
