Переглянути джерело

[FrameworkBundle] fixed Template parser to accept template with dots

Fabien Potencier 14 роки тому
батько
коміт
bd89cc7b37

+ 8 - 4
src/Symfony/Bundle/FrameworkBundle/Templating/TemplateNameParser.php

@@ -62,11 +62,13 @@ class TemplateNameParser extends BaseTemplateNameParser
         }
 
         $elements = explode('.', $parts[2]);
-        if (3 !== count($elements)) {
+        if (3 > count($elements)) {
             throw new \InvalidArgumentException(sprintf('Template name "%s" is not valid (format is "bundle:section:template.format.engine").', $name));
         }
+        $engine = array_pop($elements);
+        $format = array_pop($elements);
 
-        $template = new TemplateReference($parts[0], $parts[1], $elements[0], $elements[1], $elements[2]);
+        $template = new TemplateReference($parts[0], $parts[1], implode('.', $elements), $format, $engine);
 
         if ($template->get('bundle')) {
             try {
@@ -91,11 +93,13 @@ class TemplateNameParser extends BaseTemplateNameParser
         $parts = explode('/', strtr($file, '\\', '/'));
 
         $elements = explode('.', array_pop($parts));
-        if (3 !== count($elements)) {
+        if (3 > count($elements)) {
             return false;
         }
+        $engine = array_pop($elements);
+        $format = array_pop($elements);
 
-        return new TemplateReference('', implode('/', $parts), $elements[0], $elements[1], $elements[2]);
+        return new TemplateReference('', implode('/', $parts), implode('.', $elements), $format, $engine);
     }
 
 }

+ 3 - 1
src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/TemplateFinderTest.php

@@ -47,9 +47,11 @@ class TemplateFinderTest extends TestCase
             $finder->findAllTemplates()
         );
 
-        $this->assertEquals(3, count($templates), '->findAllTemplates() find all templates in the bundles and global folders');
+        $this->assertEquals(5, count($templates), '->findAllTemplates() find all templates in the bundles and global folders');
         $this->assertContains('BaseBundle::base.format.engine', $templates);
+        $this->assertContains('BaseBundle::this.is.a.template.format.engine', $templates);
         $this->assertContains('BaseBundle:controller:base.format.engine', $templates);
+        $this->assertContains('::this.is.a.template.format.engine', $templates);
         $this->assertContains('::resource.format.engine', $templates);
     }
 

+ 0 - 0
src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/BaseBundle/Resources/views/this.is.not.a.template


+ 0 - 0
src/Symfony/Bundle/FrameworkBundle/Tests/Fixtures/Resources/views/this.is.not.a.template


+ 1 - 1
src/Symfony/Bundle/FrameworkBundle/Tests/Templating/TemplateNameParserTest.php

@@ -62,6 +62,7 @@ class TemplateNameParserTest extends TestCase
             array('SensioCmsFooBundle:Post:index.html.php', new TemplateReference('SensioCmsFooBundle', 'Post', 'index', 'html', 'php')),
             array(':Post:index.html.php', new TemplateReference('', 'Post', 'index', 'html', 'php')),
             array('::index.html.php', new TemplateReference('', '', 'index', 'html', 'php')),
+            array('FooBundle:Post:foo.bar.index.html.php', new TemplateReference('FooBundle', 'Post', 'foo.bar.index', 'html', 'php')),
         );
     }
 
@@ -81,7 +82,6 @@ class TemplateNameParserTest extends TestCase
             array('FooBundle:Post:index'),
             array('FooBundle:Post'),
             array('FooBundle:Post:foo:bar'),
-            array('FooBundle:Post:index.foo.bar.foobar'),
         );
     }