Skip to content
Snippets Groups Projects
Commit fde3789b authored by dyszczo's avatar dyszczo
Browse files

chain resolver implementation

parent e1fa1b45
No related branches found
No related tags found
2 merge requests!8feat/woo template,!3Feature/implementation
<?php
namespace WPDesk\View\Resolver;
use WPDesk\View\Renderer\Renderer;
use WPDesk\View\Resolver\Exception\CanNotResolve;
/**
* Provide resolvers and this class can try them one after another
*
* @package WPDesk\View\Resolver
*/
class ChainResolver implements Resolver
{
/** @var Resolver[] */
private $resolvers;
/**
* Warning: function with variadic input. Input should be list of Resolver instances.
*/
public function __construct()
{
$args = func_get_args();
foreach ($args as $resolver) {
$this->appendResolver($resolver);
}
}
/**
* Append resolver to the end of the list
*
* @param Resolver $resolver
*/
public function appendResolver( $resolver)
{
$this->resolvers[] = $resolver;
}
/**
* Resolve name to full path
*
* @param string $name
* @param Renderer|null $renderer
*
* @return string
*/
public function resolve($name, Renderer $renderer = null)
{
foreach ($this->resolvers as $resolver) {
try {
return $resolver->resolve($name);
} catch (CanNotResolve $e) {
// not interested
}
}
throw new CanNotResolve("Cannot resolve {$name}");
}
}
......@@ -21,7 +21,7 @@ class DirResolver implements Resolver
/**
* Base path for templates ie. subdir
*
* @param $template_base_path
* @param $dir
*/
public function __construct($dir)
{
......
<?php
namespace WPDesk\View\Resolver;
use WPDesk\View\Renderer\Renderer;
use WPDesk\View\Resolver\Exception\CanNotResolve;
/**
* This resolver never finds the file
*
* @package WPDesk\View\Resolver
*/
class NullResolver implements Resolver
{
public function resolve($name, Renderer $renderer = null)
{
throw new CanNotResolve("Null Cannot resolve");
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment