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
Post a Comment