/** * When mounting a controller class with a prefix most times you have a route with a blank path. * That is the only route that flushes to include an (unwanted) trailing slash. * * This fixes that trailing slash. * * @param string $prefix * @return \Symfony\Component\Routing\RouteCollection */ public function flush($prefix = '') { $routes = parent::flush($prefix); foreach ($routes->all() as $name => $route) { if (substr($route->getPath(), -1) === '/') { $route->setPath(rtrim($route->getPath(), '/')); } } return $routes; }
public function testConflictingRouteNames() { $controllers = new ControllerCollection(); $mountedRootController = new Controller(new Route('/')); $controllers->add($mountedRootController); $mainRootController = new Controller(new Route('/')); $mainRootController->bindDefaultRouteName('main_'); $controllers->flush(); $this->assertNotEquals($mainRootController->getRouteName(), $mountedRootController->getRouteName()); }
public function testUniqueGeneratedRouteNames() { $controllers = new ControllerCollection(new Route()); $controllers->match('/a-a', function () { }); $controllers->match('/a_a', function () { }); $routes = $controllers->flush(); $this->assertCount(2, $routes->all()); $this->assertEquals(array('_a_a', '_a_a_'), array_keys($routes->all())); }
public function testControllerFreezing() { $routes = new RouteCollection(); $controllers = new ControllerCollection($routes); $fooController = new Controller(new Route('/foo')); $fooController->bind('foo'); $controllers->add($fooController); $barController = new Controller(new Route('/bar')); $barController->bind('bar'); $controllers->add($barController); $controllers->flush(); try { $fooController->bind('foo2'); $this->fail(); } catch (ControllerFrozenException $e) { } try { $barController->bind('bar2'); $this->fail(); } catch (ControllerFrozenException $e) { } }
public function testRoutesFactoryInConstructor() { $app = new Application(); $app['routes_factory'] = $app->factory(function () { return new RouteCollectionSubClass2(); }); $controllers = new ControllerCollection(new Route(), $app['routes_factory']); $routes = $controllers->flush(); $this->assertInstanceOf('Silex\\Tests\\RouteCollectionSubClass2', $routes); }
public function testUniqueGeneratedRouteNamesAmongNestedMounts() { $controllers = new ControllerCollection(new Route()); $controllers->mount('/root-a', $rootA = new ControllerCollection(new Route())); $controllers->mount('/root_a', $rootB = new ControllerCollection(new Route())); $rootA->mount('/tree', $treeA = new ControllerCollection(new Route())); $rootB->mount('/tree', $treeB = new ControllerCollection(new Route())); $treeA->match('/leaf', function () { }); $treeB->match('/leaf', function () { }); $routes = $controllers->flush(); $this->assertCount(2, $routes->all()); $this->assertEquals(array('_root_a_tree_leaf', '_root_a_tree_leaf_'), array_keys($routes->all())); }