public function middleware($service, $args = []) { if (!is_string($service)) { $args = $service; $service = uniqid(); } if (is_object($args) && !is_callable($args) && !$args instanceof Middleware) { throw new Exception('Middleware must be an instace of Tipsy\\Middleware'); } if (!$this->_services[$service]) { $this->service($service, $args, true); } if ($this->_middlewares[$service]) { return $this->service($service); } $middleware = ['service' => $service, 'args' => $args, 'started' => $this->_middlewareStart]; $this->_middlewares[$service] = $middleware; if ($this->_middlewareStart) { Middleware::_start($middleware, $this); } return $this->service($service); }