/** * Validate http method or verb. * * @param Route $route * @param RequestContext $request * * @return bool */ public function match(Route $route, RequestContext $request) { if (0 === $route->getMethod()->count()) { return true; } return $route->getMethod()->has($request->getMethod()); }
/** * Validate host if exists. * * @param Route $route * @param RequestContext $request * * @return bool */ public function match(Route $route, RequestContext $request) { if (false === $route->getDomain()->hasDomain()) { return true; } return (string) $route->getDomain() === $request->getHost(); }
/** * Validate schema. * * @param Route $route * @param RequestContext $request * * @return bool */ public function match(Route $route, RequestContext $request) { return $route->getSchema()->has($request->getSchema()); }
/** * Handle route request on router. * * @param Route|null $route * @param RequestContext $request * @param Router $router * @param RequestContext $previousRequest */ public function handleRouteRequest(Route $route = null, RequestContext $request, Router $router, RequestContext $previousRequest = null) { $caller = \Closure::bind($route->getHandler(), null); $stmt = $caller($request->getParameter('slug')); $this->assertTrue(in_array($stmt, ['Page: welcome-nerd', 'Page: hello-world'])); }
/** * Validate given path pattern. * * @param Route $route * @param RequestContext $request * * @return bool */ public function match(Route $route, RequestContext $request) { return (bool) preg_match($route->getRegex()->getRegexPattern(), rawurldecode($request->getPath())); }
/** * Compile string handler. * * @param Route $route * @param RequestContext $request * @param string $handler * * @return Response|null * * @throws HttpNotFoundException */ protected function compileStringHandler(Route $route, RequestContext $request, $handler) { $parts = explode(':', $handler); $parameters = array_map('convert_to_camel_case', array_flip((array) $request->getParameters())); $parameters = array_flip($parameters); $action = end($parts); $controller = $this->buildController($handler, $parts, $parameters); if (!method_exists($controller->getOriginalInstance(), $action . 'Action')) { throw new HttpNotFoundException(sprintf('Action "%sAction" not found on controller "%s".', $action, get_class($controller->getOriginalInstance()))); } return $this->dispatchMiddlewares($route, $request, function () use($parameters, $controller, $action) { if (!$this->responseEvent->hasResponse()) { return $controller->callMethod($action . 'Action', $parameters); } return $this->responseEvent->getResponse(); }, $action); }
/** * Generate route request by route name. * * @param string $name * @param array $parameters * * @return RequestContext */ public function generateRoute($name, array $parameters = array()) { $route = $this->collection->get($name); if (null === $route) { throw new InvalidArgumentException(sprintf('Route with name "%s" not found.', $name)); } $request = RequestContext::createFromRoute($route, $parameters); if (false === $this->isMatch($route, $request)) { throw new InvalidArgumentException(sprintf('Failed generate route with name "%s", mismatch rules.', $name)); } return $request; }
/** * Redirect response. * * @param RequestContext $context * @param string $queryString * @param int $delay * * @return Response\RedirectResponse */ public function redirect(RequestContext $context, $queryString = '', $delay = 0) { return new Response\RedirectResponse($context->generateUrl() . $queryString, $delay); }