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;
 }
Example #2
0
 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'])));
 }