diff --git a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md index b96aab28d9..4b4388b54f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md +++ b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md @@ -36,3 +36,5 @@ CHANGELOG start on demand. * Commands cache:warmup and cache:clear (unless --no-warmup is specified) now create the class cache. + * [BC BREAK] TemplateNameParser::parseFromFilename() has been moved to a dedicated + parser: TemplateFilenameParser::parse(). diff --git a/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/TemplateFinder.php b/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/TemplateFinder.php index 16675f44fc..7c441a8748 100644 --- a/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/TemplateFinder.php +++ b/src/Symfony/Bundle/FrameworkBundle/CacheWarmer/TemplateFinder.php @@ -13,7 +13,7 @@ namespace Symfony\Bundle\FrameworkBundle\CacheWarmer; use Symfony\Component\HttpKernel\KernelInterface; use Symfony\Component\Finder\Finder; -use Symfony\Bundle\FrameworkBundle\Templating\TemplateNameParser; +use Symfony\Component\Templating\TemplateNameParserInterface; use Symfony\Component\HttpKernel\Bundle\BundleInterface; /** @@ -31,11 +31,11 @@ class TemplateFinder implements TemplateFinderInterface /** * Constructor. * - * @param KernelInterface $kernel A KernelInterface instance - * @param TemplateNameParser $parser A TemplateNameParser instance - * @param string $rootDir The directory where global templates can be stored + * @param KernelInterface $kernel A KernelInterface instance + * @param TemplateNameParserInterface $parser A TemplateNameParserInterface instance + * @param string $rootDir The directory where global templates can be stored */ - public function __construct(KernelInterface $kernel, TemplateNameParser $parser, $rootDir) + public function __construct(KernelInterface $kernel, TemplateNameParserInterface $parser, $rootDir) { $this->kernel = $kernel; $this->parser = $parser; @@ -78,7 +78,7 @@ class TemplateFinder implements TemplateFinderInterface if (is_dir($dir)) { $finder = new Finder(); foreach ($finder->files()->followLinks()->in($dir) as $file) { - $template = $this->parser->parseFromFilename($file->getRelativePathname()); + $template = $this->parser->parse($file->getRelativePathname()); if (false !== $template) { $templates[] = $template; } diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml index 40269cc42d..63238d78da 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml @@ -7,6 +7,7 @@ Symfony\Bundle\FrameworkBundle\Templating\DelegatingEngine Symfony\Bundle\FrameworkBundle\Templating\TemplateNameParser + Symfony\Bundle\FrameworkBundle\Templating\TemplateFilenameParser Symfony\Bundle\FrameworkBundle\CacheWarmer\TemplatePathsCacheWarmer Symfony\Bundle\FrameworkBundle\Templating\Loader\TemplateLocator Symfony\Bundle\FrameworkBundle\Templating\Loader\FilesystemLoader @@ -25,6 +26,8 @@ + + %kernel.cache_dir% @@ -32,7 +35,7 @@ - + %kernel.root_dir%/Resources diff --git a/src/Symfony/Bundle/FrameworkBundle/Templating/TemplateFilenameParser.php b/src/Symfony/Bundle/FrameworkBundle/Templating/TemplateFilenameParser.php new file mode 100644 index 0000000000..befb3e8f85 --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Templating/TemplateFilenameParser.php @@ -0,0 +1,40 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bundle\FrameworkBundle\Templating; + +use Symfony\Component\Templating\TemplateNameParserInterface; + +/** + * TemplateFilenameParser converts template filenames to + * TemplateReferenceInterface instances. + * + * @author Fabien Potencier + */ +class TemplateFilenameParser implements TemplateNameParserInterface +{ + /** + * {@inheritdoc} + */ + public function parse($file) + { + $parts = explode('/', strtr($file, '\\', '/')); + + $elements = explode('.', array_pop($parts)); + if (3 > count($elements)) { + return false; + } + $engine = array_pop($elements); + $format = array_pop($elements); + + return new TemplateReference('', implode('/', $parts), implode('.', $elements), $format, $engine); + } +} diff --git a/src/Symfony/Bundle/FrameworkBundle/Templating/TemplateNameParser.php b/src/Symfony/Bundle/FrameworkBundle/Templating/TemplateNameParser.php index 944c60f80d..4eeda1d857 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Templating/TemplateNameParser.php +++ b/src/Symfony/Bundle/FrameworkBundle/Templating/TemplateNameParser.php @@ -11,7 +11,7 @@ namespace Symfony\Bundle\FrameworkBundle\Templating; -use Symfony\Component\Templating\TemplateNameParser as BaseTemplateNameParser; +use Symfony\Component\Templating\TemplateNameParserInterface; use Symfony\Component\Templating\TemplateReferenceInterface; use Symfony\Component\HttpKernel\KernelInterface; @@ -22,7 +22,7 @@ use Symfony\Component\HttpKernel\KernelInterface; * * @author Fabien Potencier */ -class TemplateNameParser extends BaseTemplateNameParser +class TemplateNameParser implements TemplateNameParserInterface { protected $kernel; protected $cache; @@ -80,26 +80,4 @@ class TemplateNameParser extends BaseTemplateNameParser return $this->cache[$name] = $template; } - - /** - * Convert a filename to a template. - * - * @param string $file The filename - * - * @return TemplateReferenceInterface A template - */ - public function parseFromFilename($file) - { - $parts = explode('/', strtr($file, '\\', '/')); - - $elements = explode('.', array_pop($parts)); - if (3 > count($elements)) { - return false; - } - $engine = array_pop($elements); - $format = array_pop($elements); - - return new TemplateReference('', implode('/', $parts), implode('.', $elements), $format, $engine); - } - } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/TemplateFinderTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/TemplateFinderTest.php index 23f2a4fb82..6b066dd6a8 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/TemplateFinderTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/TemplateFinderTest.php @@ -12,7 +12,7 @@ namespace Symfony\Bundle\FrameworkBundle\Tests\CacheWarmer; use Symfony\Bundle\FrameworkBundle\Tests\TestCase; -use Symfony\Bundle\FrameworkBundle\Templating\TemplateNameParser; +use Symfony\Bundle\FrameworkBundle\Templating\TemplateFilenameParser; use Symfony\Bundle\FrameworkBundle\CacheWarmer\TemplateFinder; use Symfony\Bundle\FrameworkBundle\Tests\Fixtures\BaseBundle\BaseBundle; @@ -38,7 +38,7 @@ class TemplateFinderTest extends TestCase ->will($this->returnValue(array('BaseBundle' => new BaseBundle()))) ; - $parser = new TemplateNameParser($kernel); + $parser = new TemplateFilenameParser($kernel); $finder = new TemplateFinder($kernel, $parser, __DIR__.'/../Fixtures/Resources'); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/TemplateFilenameParserTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/TemplateFilenameParserTest.php new file mode 100644 index 0000000000..77dd2699ab --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/TemplateFilenameParserTest.php @@ -0,0 +1,56 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bundle\FrameworkBundle\Tests\Templating; + +use Symfony\Bundle\FrameworkBundle\Tests\TestCase; +use Symfony\Bundle\FrameworkBundle\Templating\TemplateFilenameParser; +use Symfony\Bundle\FrameworkBundle\Templating\TemplateReference; + +class TemplateFilenameParserTest extends TestCase +{ + protected $parser; + + protected function setUp() + { + $this->parser = new TemplateFilenameParser(); + } + + protected function tearDown() + { + $this->parser = null; + } + + /** + * @dataProvider getFilenameToTemplateProvider + */ + public function testParseFromFilename($file, $ref) + { + $template = $this->parser->parse($file); + + if ($ref === false) { + $this->assertFalse($template); + } else { + $this->assertEquals($template->getLogicalName(), $ref->getLogicalName()); + } + } + + public function getFilenameToTemplateProvider() + { + return array( + array('/path/to/section/name.format.engine', new TemplateReference('', '/path/to/section', 'name', 'format', 'engine')), + array('\\path\\to\\section\\name.format.engine', new TemplateReference('', '/path/to/section', 'name', 'format', 'engine')), + array('name.format.engine', new TemplateReference('', '', 'name', 'format', 'engine')), + array('name.format', false), + array('name', false), + ); + } +} diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/TemplateNameParserTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/TemplateNameParserTest.php index 4e86dc9a7c..2a1544c91b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/TemplateNameParserTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Templating/TemplateNameParserTest.php @@ -84,30 +84,4 @@ class TemplateNameParserTest extends TestCase array('FooBundle:Post:foo:bar'), ); } - - /** - * @dataProvider getFilenameToTemplateProvider - */ - public function testParseFromFilename($file, $ref) - { - $template = $this->parser->parseFromFilename($file); - - if ($ref === false) { - $this->assertFalse($template); - } else { - $this->assertEquals($template->getLogicalName(), $ref->getLogicalName()); - } - } - - public function getFilenameToTemplateProvider() - { - return array( - array('/path/to/section/name.format.engine', new TemplateReference('', '/path/to/section', 'name', 'format', 'engine')), - array('\\path\\to\\section\\name.format.engine', new TemplateReference('', '/path/to/section', 'name', 'format', 'engine')), - array('name.format.engine', new TemplateReference('', '', 'name', 'format', 'engine')), - array('name.format', false), - array('name', false), - ); - } - }