Move loader cascading into the loadPartial method.
This means the `partialsLoader` property is never set to the default loader, fixing things like `setPartials`, but template loading cascades as per the spec. Add test coverage for partial cascading.
This commit is contained in:
+12
-4
@@ -226,7 +226,7 @@ class Mustache_Engine
|
|||||||
public function getPartialsLoader()
|
public function getPartialsLoader()
|
||||||
{
|
{
|
||||||
if (!isset($this->partialsLoader)) {
|
if (!isset($this->partialsLoader)) {
|
||||||
$this->partialsLoader = $this->getLoader();
|
$this->partialsLoader = new Mustache_Loader_ArrayLoader;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->partialsLoader;
|
return $this->partialsLoader;
|
||||||
@@ -492,13 +492,21 @@ class Mustache_Engine
|
|||||||
public function loadPartial($name)
|
public function loadPartial($name)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
return $this->loadSource($this->getPartialsLoader()->load($name));
|
if (isset($this->partialsLoader)) {
|
||||||
} catch (InvalidArgumentException $e) {
|
$loader = $this->partialsLoader;
|
||||||
|
} elseif (isset($this->loader) && !$this->loader instanceof Mustache_Loader_StringLoader) {
|
||||||
|
$loader = $this->loader;
|
||||||
|
} else {
|
||||||
|
throw new Mustache_Exception_UnknownTemplateException($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->loadSource($loader->load($name));
|
||||||
|
} catch (Mustache_Exception_UnknownTemplateException $e) {
|
||||||
// If the named partial cannot be found, log then return null.
|
// If the named partial cannot be found, log then return null.
|
||||||
$this->log(
|
$this->log(
|
||||||
Mustache_Logger::WARNING,
|
Mustache_Logger::WARNING,
|
||||||
'Partial not found: "{name}"',
|
'Partial not found: "{name}"',
|
||||||
array('name' => $name)
|
array('name' => $e->getTemplateName())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ class Mustache_Test_EngineTest extends PHPUnit_Framework_TestCase
|
|||||||
$mustache->setLoader($loader);
|
$mustache->setLoader($loader);
|
||||||
$this->assertSame($loader, $mustache->getLoader());
|
$this->assertSame($loader, $mustache->getLoader());
|
||||||
|
|
||||||
$this->assertSame($loader, $mustache->getPartialsLoader());
|
$this->assertNotSame($loader, $mustache->getPartialsLoader());
|
||||||
$mustache->setPartialsLoader($loader);
|
$mustache->setPartialsLoader($loader);
|
||||||
$this->assertSame($loader, $mustache->getPartialsLoader());
|
$this->assertSame($loader, $mustache->getPartialsLoader());
|
||||||
|
|
||||||
@@ -240,6 +240,29 @@ class Mustache_Test_EngineTest extends PHPUnit_Framework_TestCase
|
|||||||
$mustache->setLogger(new StdClass);
|
$mustache->setLogger(new StdClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testLoadPartialCascading()
|
||||||
|
{
|
||||||
|
$loader = new Mustache_Loader_ArrayLoader(array(
|
||||||
|
'foo' => 'FOO',
|
||||||
|
));
|
||||||
|
|
||||||
|
$mustache = new Mustache_Engine(array('loader' => $loader));
|
||||||
|
|
||||||
|
$tpl = $mustache->loadTemplate('foo');
|
||||||
|
|
||||||
|
$this->assertSame($tpl, $mustache->loadPartial('foo'));
|
||||||
|
|
||||||
|
$mustache->setPartials(array(
|
||||||
|
'foo' => 'f00',
|
||||||
|
));
|
||||||
|
|
||||||
|
// setting partials overrides the default template loading fallback.
|
||||||
|
$this->assertNotSame($tpl, $mustache->loadPartial('foo'));
|
||||||
|
|
||||||
|
// but it didn't overwrite the original template loader templates.
|
||||||
|
$this->assertSame($tpl, $mustache->loadTemplate('foo'));
|
||||||
|
}
|
||||||
|
|
||||||
public function testPartialLoadFailLogging()
|
public function testPartialLoadFailLogging()
|
||||||
{
|
{
|
||||||
$name = tempnam(sys_get_temp_dir(), 'mustache-test');
|
$name = tempnam(sys_get_temp_dir(), 'mustache-test');
|
||||||
|
|||||||
Reference in New Issue
Block a user