From fde3789b73cd889e90d55a94f1a94193de6b7fc1 Mon Sep 17 00:00:00 2001 From: dyszczo <krzysiek@inspirelabs.pl> Date: Sun, 23 Sep 2018 22:39:55 +0200 Subject: [PATCH] chain resolver implementation --- src/Resolver/ChainResolver.php | 61 ++++++++++++++++++++++++++++++++++ src/Resolver/DirResolver.php | 2 +- src/Resolver/NullResolver.php | 22 ++++++++++++ 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 src/Resolver/ChainResolver.php create mode 100644 src/Resolver/NullResolver.php diff --git a/src/Resolver/ChainResolver.php b/src/Resolver/ChainResolver.php new file mode 100644 index 0000000..eaa394f --- /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 f4ab594..5122631 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 0000000..4f69832 --- /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"); + } + +} -- GitLab