. */ declare(strict_types=1); namespace FireflyIII\Http\Middleware; use Closure; use FireflyIII\Support\Domain; use Illuminate\Contracts\Auth\Factory as Auth; use Illuminate\Http\Request; use Illuminate\Routing\Route; /** * Class Binder */ class Binder { /** * The authentication factory instance. * * @var Auth */ protected $auth; /** * The binders. * * @var array */ protected $binders = []; /** * Binder constructor. * * @param Auth $auth */ public function __construct(Auth $auth) { $this->binders = Domain::getBindables(); $this->auth = $auth; } /** * Handle an incoming request. * * @param Request $request * @param Closure $next * * @return mixed * */ public function handle($request, Closure $next) { foreach ($request->route()->parameters() as $key => $value) { if (array_key_exists($key, $this->binders)) { $boundObject = $this->performBinding($key, $value, $request->route()); $request->route()->setParameter($key, $boundObject); } } return $next($request); } /** * Do the binding. * * @param string $key * @param string $value * @param Route $route * * @return mixed */ private function performBinding(string $key, string $value, Route $route) { $class = $this->binders[$key]; return $class::routeBinder($value, $route); } }