diff --git a/src/Resolver/ChainResolver.php b/src/Resolver/ChainResolver.php new file mode 100644 index 0000000000000000000000000000000000000000..eaa394f1d761aa032fa3da442540bbfdeadb20a3 --- /dev/null +++ b/src/Resolver/ChainResolver.php @@ -0,0 +1,61 @@ +<?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}"); + } + +} diff --git a/src/Resolver/DirResolver.php b/src/Resolver/DirResolver.php index f4ab594a9b17e825e336546ab3cfcbb9dbf717f3..5122631eb9b78ec3a32efc900a1e4468acd294bd 100644 --- a/src/Resolver/DirResolver.php +++ b/src/Resolver/DirResolver.php @@ -21,7 +21,7 @@ class DirResolver implements Resolver /** * Base path for templates ie. subdir * - * @param $template_base_path + * @param $dir */ public function __construct($dir) { diff --git a/src/Resolver/NullResolver.php b/src/Resolver/NullResolver.php new file mode 100644 index 0000000000000000000000000000000000000000..4f69832fb4944bb87ecc7f1706ea3dd1c8790ece --- /dev/null +++ b/src/Resolver/NullResolver.php @@ -0,0 +1,22 @@ +<?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"); + } + +}