php - How to Add an Object to Laravel's IOC Container from Middleware -


i want create object in middleware (in case, collection eloquent query), , add ioc container can type-hint method signatures in controllers access it.

is possible? can't find examples online.

you can easy, in several steps.

create new middleware (name want)

php artisan make:middleware usercollectionmiddleware 

create new collection class extend eloquent database collection. step not required, let in future create different bindings, using different collection types. otherwise can 1 binding illuminate\database\eloquent\collection.

app/collection/usercollection.php

<?php namespace app\collection;  use illuminate\database\eloquent\collection;  class usercollection extends collection {  } 

add bindings in app/http/middleware/usercollectionmiddleware.php

<?php namespace app\http\middleware;  use closure; use app\user; use app\collection\usercollection;  class usercollectionmiddleware {      /**      * handle incoming request.      *      * @param  \illuminate\http\request  $request      * @param  \closure  $next      * @return mixed      */     public function handle($request, closure $next)     {         app()->bind('app\collection\usercollection', function() {             // our controllers expect instance of usercollection             // retrieve records database , pass them             // new usercollection object, extends collection             return new usercollection(user::all()->toarray());         });          return $next($request);     }  } 

don't forget put middleware on desired routes, otherwise error

route::get('home', [     'middleware' => 'app\http\middleware\usercollectionmiddleware',     'uses' => 'homecontroller@index' ]); 

now can type hint dependency in controller this

<?php namespace app\http\controllers;  use app\collection\usercollection;  class homecontroller extends controller {      /**      * show application dashboard user.      *      * @return response      */     public function index(usercollection $users)     {         return view('home', compact('users'));     }  } 

Comments

Popular posts from this blog

Java 3D LWJGL collision -

spring - SubProtocolWebSocketHandler - No handlers -

methods - python can't use function in submodule -