mirror of
https://github.com/twigphp/Twig.git
synced 2026-09-15 03:46:39 +00:00
fixed the filesystem loader cache when a template name exists in several namespaces
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
* 1.14.0 (2013-XX-XX)
|
||||
|
||||
* fixed the filesystem loader cache when a template name exists in several namespaces
|
||||
* added support for calling macros defined in a template without importing them first
|
||||
* added support for named arguments for macros
|
||||
* replaced a PHP fatal error with an exception when a macro does not exist
|
||||
|
||||
@@ -179,14 +179,14 @@ class Twig_Loader_Filesystem implements Twig_LoaderInterface, Twig_ExistsLoaderI
|
||||
$this->validateName($name);
|
||||
|
||||
$namespace = self::MAIN_NAMESPACE;
|
||||
$shortname = $name;
|
||||
if (isset($name[0]) && '@' == $name[0]) {
|
||||
if (false === $pos = strpos($name, '/')) {
|
||||
throw new Twig_Error_Loader(sprintf('Malformed namespaced template name "%s" (expecting "@namespace/template_name").', $name));
|
||||
}
|
||||
|
||||
$namespace = substr($name, 1, $pos - 1);
|
||||
|
||||
$name = substr($name, $pos + 1);
|
||||
$shortname = substr($name, $pos + 1);
|
||||
}
|
||||
|
||||
if (!isset($this->paths[$namespace])) {
|
||||
@@ -194,8 +194,8 @@ class Twig_Loader_Filesystem implements Twig_LoaderInterface, Twig_ExistsLoaderI
|
||||
}
|
||||
|
||||
foreach ($this->paths[$namespace] as $path) {
|
||||
if (is_file($path.'/'.$name)) {
|
||||
return $this->cache[$name] = $path.'/'.$name;
|
||||
if (is_file($path.'/'.$shortname)) {
|
||||
return $this->cache[$name] = $path.'/'.$shortname;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -94,4 +94,34 @@ class Twig_Tests_Loader_FilesystemTest extends PHPUnit_Framework_TestCase
|
||||
$loader->addPath(sys_get_temp_dir(), 'named');
|
||||
$this->assertEquals(array(Twig_Loader_Filesystem::MAIN_NAMESPACE, 'named'), $loader->getNamespaces());
|
||||
}
|
||||
|
||||
public function testFindTemplateExceptionNamespace()
|
||||
{
|
||||
$basePath = dirname(__FILE__).'/Fixtures';
|
||||
|
||||
$loader = new Twig_Loader_Filesystem(array($basePath.'/normal'));
|
||||
$loader->addPath($basePath.'/named', 'named');
|
||||
|
||||
try {
|
||||
$loader->getSource('@named/nowhere.html');
|
||||
} catch (Exception $e) {
|
||||
$this->assertInstanceof('Twig_Error_Loader', $e);
|
||||
$this->assertContains('Unable to find template "@named/nowhere.html"', $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function testFindTemplateWithCache()
|
||||
{
|
||||
$basePath = dirname(__FILE__).'/Fixtures';
|
||||
|
||||
$loader = new Twig_Loader_Filesystem(array($basePath.'/normal'));
|
||||
$loader->addPath($basePath.'/named', 'named');
|
||||
|
||||
// prime the cache for index.html in the named namespace
|
||||
$namedSource = $loader->getSource('@named/index.html');
|
||||
$this->assertEquals("named path\n", $namedSource);
|
||||
|
||||
// get index.html from the main namespace
|
||||
$this->assertEquals("path\n", $loader->getSource('index.html'));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user