diff --git a/src/Mustache/Compiler.php b/src/Mustache/Compiler.php index 5c002d1..36596c6 100644 --- a/src/Mustache/Compiler.php +++ b/src/Mustache/Compiler.php @@ -221,7 +221,11 @@ class Mustache_Compiler { return sprintf($this->prepare(self::INVERTED_SECTION, $level), $id, $method, $id, $this->walk($nodes, $level)); } - const PARTIAL = '$buffer .= $this->mustache->loadPartial(%s)->renderInternal($context, %s);'; + const PARTIAL = ' + if ($partial = $this->mustache->loadPartial(%s)) { + $buffer .= $partial->renderInternal($context, %s); + } + '; /** * Generate Mustache Template partial call PHP source. diff --git a/src/Mustache/Mustache.php b/src/Mustache/Mustache.php index 1859d34..8c92547 100644 --- a/src/Mustache/Mustache.php +++ b/src/Mustache/Mustache.php @@ -414,7 +414,11 @@ class Mustache_Mustache { * @return Mustache_Template */ public function loadPartial($name) { - return $this->loadSource($this->getPartialsLoader()->load($name)); + try { + return $this->loadSource($this->getPartialsLoader()->load($name)); + } catch (InvalidArgumentException $e) { + // If the named partial cannot be found, return null. + } } /** diff --git a/test/Mustache/Test/MustacheTest.php b/test/Mustache/Test/MustacheTest.php index 8ff097d..ab7c8af 100644 --- a/test/Mustache/Test/MustacheTest.php +++ b/test/Mustache/Test/MustacheTest.php @@ -146,6 +146,17 @@ class Mustache_Test_MustacheTest extends PHPUnit_Framework_TestCase { $mustache->setPartials(array('foo' => '{{ foo }}')); } + public function testMissingPartialsTreatedAsEmptyString() { + $mustache = new Mustache_Mustache(array( + 'partials_loader' => new Mustache_Loader_ArrayLoader(array( + 'foo' => 'FOO', + 'baz' => 'BAZ', + )) + )); + + $this->assertEquals('FOOBAZ', $mustache->render('{{>foo}}{{>bar}}{{>baz}}', array())); + } + public function testHelpers() { $foo = function() { return 'foo'; }; $bar = 'BAR';