8000 [Routing] added support for hostname in the XML loader · symfony/symfony@68da6ad · GitHub
[go: up one dir, main page]

Skip to content

Commit 68da6ad

Browse files
fabpotarnaud-lb
authored andcommitted
[Routing] added support for hostname in the XML loader
1 parent 3dfca47 commit 68da6ad

File tree

5 files changed

+14
-4
lines changed

5 files changed

+14
-4
lines changed

src/Symfony/Component/Routing/Loader/XmlFileLoader.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ protected function parseNode(RouteCollection $collection, \DOMElement $node, $pa
7676
$resource = (string) $node->getAttribute('resource');
7777
$type = (string) $node->getAttribute('type');
7878
$prefix = (string) $node->getAttribute('prefix');
79+
$hostnamePattern = (string) $node->getAttribute('hostname-pattern');
7980

8081
$defaults = array();
8182
$requirements = array();
@@ -102,7 +103,7 @@ protected function parseNode(RouteCollection $collection, \DOMElement $node, $pa
102103
}
103104

104105
$this->setCurrentDir(dirname($path));
105-
$collection->addCollection($this->import($resource, ('' !== $type ? $type : null), false, $file), $prefix, $defaults, $requirements, $options);
106+
$collection->addCollection($this->import($resource, ('' !== $type ? $type : null), false, $file), $prefix, $defaults, $requirements, $options, $hostnamePattern);
106107
break;
107108
default:
108109
throw new \InvalidArgumentException(sprintf('Unable to parse tag "%s"', $node->tagName));
@@ -154,7 +155,7 @@ protected function parseRoute(RouteCollection $collection, \DOMElement $definiti
154155
}
155156
}
156157

157-
$route = new Route((string) $definition->getAttribute('pattern'), $defaults, $requirements, $options);
158+
$route = new Route((string) $definition->getAttribute('pattern'), $defaults, $requirements, $options, (string) $definition->getAttribute('hostname-pattern'));
158159

159160
$collection->add((string) $definition->getAttribute('id'), $route);
160161
}

src/Symfony/Component/Routing/Loader/schema/routing/routing-1.0.xsd

+2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
<xsd:attribute name="id" type="xsd:string" />
2525
<xsd:attribute name="pattern" type="xsd:string" />
26+
<xsd:attribute name="hostname-pattern" type="xsd:string" />
2627
</xsd:complexType>
2728

2829
<xsd:complexType name="import">
@@ -36,6 +37,7 @@
3637
<xsd:attribute name="type" type="xsd:string" />
3738
<xsd:attribute name="prefix" type="xsd:string" />
3839
<xsd:attribute name="class" type="xsd:string" />
40+
<xsd:attribute name="hostname-pattern" type="xsd:string" />
3941
</xsd:complexType>
4042

4143
<xsd:complexType name="element" mixed="true">

src/Symfony/Component/Routing/Tests/Fixtures/validpattern.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
55
xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">
66

7-
<route id="blog_show" pattern="/blog/{slug}">
7+
<route id="blog_show" pattern="/blog/{slug}" hostname-pattern="{locale}.example.com">
88
<default key="_controller">MyBundle:Blog:show</default>
99
<requirement key="_method">GET</requirement>
1010
<option key="compiler_class">RouteCompiler</option>

src/Symfony/Component/Routing/Tests/Fixtures/validresource.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
55
xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">
66

7-
<import resource="validpattern.xml" prefix="/{foo}">
7+
<import resource="validpattern.xml" prefix="/{foo}" hostname-pattern="{locale}.example.com">
88
<default key="foo">foo</default>
99
<requirement key="foo">\d+</requirement>
1010
<option key="foo">bar</option>

src/Symfony/Component/Routing/Tests/Loader/XmlFileLoaderTest.php

+7
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ public function testLoadWithRoute()
4848
$this->assertEquals(1, count($routes), 'One route is loaded');
4949
$this->assertContainsOnly('Symfony\Component\Routing\Route', $routes);
5050
$route = $routes['blog_show'];
51+
$this->assertEquals('/blog/{slug}', $route->getPattern());
52+
$this->assertEquals('MyBundle:Blog:show', $route->getDefault('_controller'));
53+
$this->assertEquals('GET', $route->getRequirement('_method'));
54+
$this->assertEquals('{locale}.example.com', $route->getHostnamePattern());
5155
$this->assertEquals('RouteCompiler', $route->getOption('compiler_class'));
5256
}
5357

@@ -59,9 +63,12 @@ public function testLoadWithImport()
5963

6064
$this->assertEquals(1, count($routes), 'One route is loaded');
6165
$this->assertContainsOnly('Symfony\Component\Routing\Route', $routes);
66+
$this->assertEquals('/{foo}/blog/{slug}', $routes['blog_show']->getPattern());
67+
$this->assertEquals('MyBundle:Blog:show', $routes['blog_show']->getDefault('_controller'));
6268
$this->assertEquals('foo', $routes['blog_show']->getDefault('foo'));
6369
$this->assertEquals('\d+', $routes['blog_show']->getRequirement('foo'));
6470
$this->assertEquals('bar', $routes['blog_show']->getOption('foo'));
71+
$this->assertEquals('{locale}.example.com', $routes['blog_show']->getHostnamePattern());
6572
}
6673

6774
/**

0 commit comments

Comments
 (0)
0