public function __invoke(array $data) { $path = $data['path']; $name = !empty($data['name']) ? $data['name'] : null; $i18n = !empty($data['i18n']) ? $data['i18n'] : null; $values = !empty($data['values']) ? $data['values'] : []; $allows = !empty($data['allows']) ? $data['allows'] : []; $allows = is_array($allows) ? $allows : [$allows]; $defaults = !empty($data['defaults']) ? $data['defaults'] : []; $constraints = !empty($data['constraints']) ? $data['constraints'] : []; $route = new PlaceholderRoute($path); if ($name) { $route->setName($name); } $route->values($values)->allows($allows)->defaults($defaults)->constraints($constraints); if ($i18n) { $route = $route->i18n($i18n); } return $route; }
public function testPlaceholderRouteMatch() { $route = (new PlaceholderRoute('/foo/:bar(/)(/corge/:qux(/)(/:fred/:waldo+(/)))'))->setName('foobar')->defaults(['bar' => 'apple', 'qux' => 'pear', 'fred' => 'cherry'])->constraints(['bar' => '[a-zA-Z]+', 'qux' => '[a-zA-Z]+']); $routeData = $route->match(new ServerRequest([], [], 'http://example.com/foo', 'GET')); $this->assertFalse($routeData); $routeData = $route->match(new ServerRequest([], [], 'http://example.com/foo/42', 'GET')); $this->assertFalse($routeData); $routeData = $route->match(new ServerRequest([], [], 'http://example.com/foo/banana/', 'GET')); $this->assertInstanceOf('Gobline\\Router\\RouteData', $routeData); $this->assertSame('foobar', $routeData->getName()); $this->assertSame(['bar' => 'banana', 'qux' => 'pear', 'fred' => 'cherry'], $routeData->getParams()); $this->assertSame('/foo/banana', $route->buildUri(new RouteData($route->getName(), ['bar' => 'banana']), 'en')); $routeData = $route->match(new ServerRequest([], [], 'http://example.com/foo/banana/corge', 'GET')); $this->assertFalse($routeData); $routeData = $route->match(new ServerRequest([], [], 'http://example.com/foo/banana/corge/orange', 'GET')); $this->assertInstanceOf('Gobline\\Router\\RouteData', $routeData); $this->assertSame('foobar', $routeData->getName()); $this->assertSame(['bar' => 'banana', 'qux' => 'orange', 'fred' => 'cherry'], $routeData->getParams()); $this->assertSame('/foo/banana/corge/orange', $route->buildUri(new RouteData($route->getName(), ['bar' => 'banana', 'qux' => 'orange']))); $routeData = $route->match(new ServerRequest([], [], 'http://example.com/foo/banana/corge/orange/strawberry/raspberry/peach', 'GET')); $this->assertInstanceOf('Gobline\\Router\\RouteData', $routeData); $this->assertSame('foobar', $routeData->getName()); $this->assertSame(['bar' => 'banana', 'qux' => 'orange', 'fred' => 'strawberry', 'waldo' => ['raspberry', 'peach']], $routeData->getParams()); $this->assertSame('/foo/banana/corge/orange/strawberry/raspberry/peach', $route->buildUri(new RouteData($route->getName(), ['bar' => 'banana', 'qux' => 'orange', 'fred' => 'strawberry', 'waldo' => ['raspberry', 'peach']]))); $route = new PlaceholderRoute('(/)(/foo/:bar(/))'); $route->setName('foobar'); $routeData = $route->match(new ServerRequest([], [], 'http://example.com', 'GET')); $this->assertInstanceOf('Gobline\\Router\\RouteData', $routeData); $this->assertSame('foobar', $routeData->getName()); $this->assertSame([], $routeData->getParams()); $this->assertSame('', $route->buildUri(new RouteData($route->getName()))); $routeData = $route->match(new ServerRequest([], [], 'http://example.com/foo', 'GET')); $this->assertFalse($routeData); $routeData = $route->match(new ServerRequest([], [], 'http://example.com/foo/banana/', 'GET')); $this->assertInstanceOf('Gobline\\Router\\RouteData', $routeData); $this->assertSame('foobar', $routeData->getName()); $this->assertSame(['bar' => 'banana'], $routeData->getParams()); $this->assertSame('/foo/banana', $route->buildUri(new RouteData($route->getName(), ['bar' => 'banana']))); }