/** * @param BaseRouter|Router $router * @param BaseContext|Context $context * @param BaseRoute|Route $route * @return bool */ public function pass(BaseRouter $router, BaseContext $context, BaseRoute $route) : bool { $values = $router->extract($context, $route); if ($this->doBind) { $values = $router->bind($values, $route->getBindings()); } $arguments = $router->buildArguments($this->callback, $values, $this->doBind); $callback = $this->callback; return $callback(...$arguments); }
/** * @param Context $context * @param Route $route * @param Router $router * @return bool */ public function pass(Router $router, Context $context, Route $route) : bool { $filter = $route->get('filter'); if (!is_callable($filter)) { return true; } $values = $router->extract($context, $route); $bindings = $router->bind($values, $route->getBindings()); $arguments = $router->buildArguments($filter, $bindings); return $filter(...$arguments); }
/** * Dispatch an event * * @param Event $event Event * * @return Event */ public function dispatch(Event $event) : Event { $this->collection->sort(); /** @var Route $handler */ foreach ($this->router->match($event) as $handler) { $callback = $handler->getAction(); $callback($event); if ($event->canceled()) { break; } } return $event; }
/** * @param BaseRouter|Router $router * @param BaseContext|Context $context * @param BaseRoute|Route $route * @return bool */ public function pass(BaseRouter $router, BaseContext $context, BaseRoute $route) : bool { /** @var CallbackFilter[] $filters */ $filters = $route->get('filters', []) + $router->getRouteCollection()->getFilters(); foreach ($route->get('before', []) as $name) { if (isset($filters[$name])) { if ($filters[$name]->setBindMode(false)->pass($router, $context, $route) === false) { return false; } } } return true; }
/** * Route path * * @param \Opis\HttpRouting\Path $path * * @return mixed */ public function route(BasePath $path) { $router = new AliasRouter($this->app->collect('RouteAliases')); $alias = $router->route(new AliasPath($path->path())); if ($alias !== null) { $path = new Path((string) $alias, $path->domain(), $path->method(), $path->isSecure(), $path->request()); } $this->path = $path; $result = parent::route($path); $response = $path->request()->response(); $response->body($result); $response->send(); return $result; }
/** * Route path * * @param BaseContext|Context $context * @return mixed */ public function route(BaseContext $context) { $this->currentPath = $context; $router = new AliasRouter(app()->getCollector()->getRouteAliases()); $alias = $router->route(new BaseContext($context->path())); if ($alias !== false) { $context = new Context((string) $alias, $context->domain(), $context->method(), $context->isSecure(), $context->request()); } $result = parent::route($context); /** @var \Opis\Http\Request $request */ $request = $context->request(); /** @var \Opis\Http\Response $response */ $response = $request->response(); $response->body($result); $response->send(); return $result; }
/** * @param BaseRouter|BaseRouter $router * @param BaseContext|Context $context * @param BaseRoute|Route $route * @return bool */ public function pass(BaseRouter $router, BaseContext $context, BaseRoute $route) : bool { //match secure if (null !== ($secure = $route->get('secure'))) { if ($secure !== $context->isSecure()) { return false; } } //match method if (!in_array($context->method(), $route->get('method', ['GET']))) { return false; } // match domain if (null !== ($domain = $route->get('domain'))) { $regex = $router->getRouteCollection()->getDomainCompiler()->getRegex($domain, $route->getWildcards()); return preg_match($regex, $context->domain()); } return true; }
/** * Router constructor. * @param RouteCollection $routes * @param DispatcherResolver|null $resolver * @param FilterCollection|null $filters * @param array $specials */ public function __construct(RouteCollection $routes, DispatcherResolver $resolver = null, FilterCollection $filters = null, array $specials = []) { if ($resolver === null) { $resolver = new DispatcherResolver(); } if ($filters === null) { $filters = new FilterCollection(); $filters->addFilter(new RequestFilter())->addFilter(new UserFilter()); } parent::__construct($routes, $resolver, $filters, $specials); }