public function testWithHostOnRouteCollection() { $coll = new RouteCollection(); $coll->add('foo', new Route('/foo/{foo}')); $coll->add('bar', new Route('/bar/{foo}', array(), array(), array(), '{locale}.example.net')); $coll->setHost('{locale}.example.com'); $matcher = new UrlMatcher($coll, new RequestContext('', 'GET', 'en.example.com')); $this->assertEquals(array('foo' => 'bar', '_route' => 'foo', 'locale' => 'en'), $matcher->match('/foo/bar')); $matcher = new UrlMatcher($coll, new RequestContext('', 'GET', 'en.example.com')); $this->assertEquals(array('foo' => 'bar', '_route' => 'bar', 'locale' => 'en'), $matcher->match('/bar/bar')); }
<?php // RouteProvider.php use App\Controller; use Symfony\Component\Routing\Route; use Symfony\Component\Routing\RouteCollection; const DOMAIN_DEV = '\\w+.phoeni.x'; const DOMAIN_STAGE = 'stage.phoenix-vxtool.net'; const DOMAIN_LIVE = 'phoenix-vxtool.net'; const SUBDOMAIN_WWW = '|www.'; const SUBDOMAIN_API = 'api.'; $domain = implode('|', [DOMAIN_LIVE, DOMAIN_STAGE, DOMAIN_DEV]); $routingConf = ['web-gui' => ['domain' => $domain, 'subdomain' => SUBDOMAIN_WWW, 'routes' => ['root' => ['methods' => ['GET'], 'path' => '/', 'controller' => [Controller\Web\Gui\Index::class, 'index']], 'get-logout' => ['methods' => ['GET'], 'path' => '/logout', 'controller' => [Controller\Web\Gui\Index::class, 'getLogout']], 'get-login' => ['methods' => ['GET'], 'path' => '/login', 'controller' => [Controller\Web\Gui\Index::class, 'getLogin']], 'post-login' => ['methods' => ['POST'], 'path' => '/login', 'controller' => [Controller\Web\Gui\Index::class, 'postLogin']]]], 'web-dev' => ['domain' => $domain, 'subdomain' => SUBDOMAIN_WWW, 'path' => '/dev', 'routes' => ['test' => ['methods' => ['GET'], 'path' => '/test{developerShort}', 'controller' => [Controller\Web\Dev\DevelopmentController::class, 'test'], 'template' => '']]]]; /** * @todo put following part into \App\Routing\Loader\ArrayFileLoader */ $masterCollection = new RouteCollection(); foreach ($routingConf as $groupName => $groupConfig) { $collection = new RouteCollection(); $collection->setHost($groupConfig['subdomain'] . $groupConfig['domain']); foreach ($groupConfig['routes'] as $routeName => $route) { $defaults = array_replace_recursive(isset($route['defaults']) ? $route['defaults'] : [], ['_controller' => $route['controller'][0] . '::' . $route['controller'][1]]); $collection->add($groupName . '-' . $routeName, new Route($route['path'], $defaults, isset($route['requirements']) ? $route['requirements'] : [], isset($route['options']) ? $route['options'] : [], '', isset($route['schemes']) ? $route['schemes'] : [], isset($route['methods']) ? $route['methods'] : ['GET'], '')); } if (isset($groupConfig['path'])) { $collection->addPrefix($groupConfig['path']); } $masterCollection->addCollection($collection); } return $masterCollection;
public function testSetHost() { $collection = new RouteCollection(); $routea = new Route('/a'); $routeb = new Route('/b', array(), array(), array(), '{locale}.example.net'); $collection->add('a', $routea); $collection->add('b', $routeb); $collection->setHost('{locale}.example.com'); $this->assertEquals('{locale}.example.com', $routea->getHost()); $this->assertEquals('{locale}.example.com', $routeb->getHost()); }
public function __construct() { $this->collection = new RouteCollection(); $this->collection->setHost(Config::getInstance()->get('app.url')); $this->addDefaultsWildCards(); }