Add a CascadingLoader implementation.
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Mustache.php.
|
||||
*
|
||||
* (c) 2013 Justin Hileman
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
/**
|
||||
* A Mustache Template cascading loader implementation, which delegates to other
|
||||
* Loader instances.
|
||||
*/
|
||||
class Mustache_Loader_CascadingLoader implements Mustache_Loader
|
||||
{
|
||||
private $loaders;
|
||||
|
||||
/**
|
||||
* Construct a CascadingLoader with an array of loaders:
|
||||
*
|
||||
* $loader = new Mustache_Loader_CascadingLoader(array(
|
||||
* new Mustache_Loader_InlineLoader(__FILE__, __COMPILER_HALT_OFFSET__),
|
||||
* new Mustache_Loader_FilesystemLoader(__DIR__.'/templates')
|
||||
* ));
|
||||
*
|
||||
* @param array $loaders An array of Mustache Loader instances
|
||||
*/
|
||||
public function __construct(array $loaders = array())
|
||||
{
|
||||
$this->loaders = array();
|
||||
foreach ($loaders as $loader) {
|
||||
$this->addLoader($loader);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a Loader instance.
|
||||
*
|
||||
* @param Mustache_Loader $loader A Mustache Loader instance
|
||||
*/
|
||||
public function addLoader(Mustache_Loader $loader)
|
||||
{
|
||||
$this->loaders[] = $loader;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a Template by name.
|
||||
*
|
||||
* @throws Mustache_Exception_UnknownTemplateException If a template file is not found.
|
||||
*
|
||||
* @param string $name
|
||||
*
|
||||
* @return string Mustache Template source
|
||||
*/
|
||||
public function load($name)
|
||||
{
|
||||
foreach ($this->loaders as $loader) {
|
||||
try {
|
||||
return $loader->load($name);
|
||||
} catch (Mustache_Exception_UnknownTemplateException $e) {
|
||||
// do nothing, check the next loader.
|
||||
}
|
||||
}
|
||||
|
||||
throw new Mustache_Exception_UnknownTemplateException($name);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Mustache.php.
|
||||
*
|
||||
* (c) 2012 Justin Hileman
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @group unit
|
||||
*/
|
||||
class Mustache_Test_Loader_CascadingLoaderTest extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
public function testLoadTemplates()
|
||||
{
|
||||
$loader = new Mustache_Loader_CascadingLoader(array(
|
||||
new Mustache_Loader_ArrayLoader(array('foo' => '{{ foo }}')),
|
||||
new Mustache_Loader_ArrayLoader(array('bar' => '{{#bar}}BAR{{/bar}}')),
|
||||
));
|
||||
|
||||
$this->assertEquals('{{ foo }}', $loader->load('foo'));
|
||||
$this->assertEquals('{{#bar}}BAR{{/bar}}', $loader->load('bar'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException Mustache_Exception_UnknownTemplateException
|
||||
*/
|
||||
public function testMissingTemplatesThrowExceptions()
|
||||
{
|
||||
$loader = new Mustache_Loader_CascadingLoader(array(
|
||||
new Mustache_Loader_ArrayLoader(array('foo' => '{{ foo }}')),
|
||||
new Mustache_Loader_ArrayLoader(array('bar' => '{{#bar}}BAR{{/bar}}')),
|
||||
));
|
||||
|
||||
$loader->load('not_a_real_template');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user