/** * @dataProvider templateRequestsProvider * * @param $url * @param $method * @param $result */ public function testTemplateMatch($url, $method, $result) { $route = new FinalRoute('testResult'); $route->setUrlTemplate(new UrlTemplate(['host' => '{subdomain:[a-z]{2,5}}.example.com', 'path' => '/item/{itemId:\\d+}/', 'scheme' => 'http', 'method' => 'get|post'])); $requestContext = RequestContextFactory::createFromUrl($url, $method); $routeMatch = $route->doMatch($requestContext); if (empty($result)) { $this->assertEmpty($routeMatch, $method . ':' . $url . " should not match"); } else { $this->assertNotEmpty($routeMatch, $method . ':' . $url . " should match"); $this->assertInstanceOf('\\ReRoute\\RouteMatch', $routeMatch); } }
/** * @inheritdoc */ public function build(Url $url, UrlBuilder $urlBuilder) { $url->setHost('admin.example.com'); $parts = []; $action = $urlBuilder->useParameter('action'); if (!empty($action) and $action != $this->defaultAction) { $parts[] = $action; } $controllerItem = $urlBuilder->useParameter('controllerItem'); if (!empty($parts) or !empty($controllerItem) and $action != $this->defaultControllerItem) { $parts[] = $controllerItem; } $controllerGroup = $urlBuilder->useParameter('controllerGroup'); if (!empty($parts) or !empty($controllerGroup) and $action != $this->defaultControllerGroup) { $parts[] = $controllerGroup; } $url->setPath('/' . implode('/', array_reverse($parts))); parent::build($url, $urlBuilder); }