Skip to content
Snippets Groups Projects
Select Git revision
  • b5eaebd8f3f672d3bb2ea6219fd66818e9959ef2
  • master default protected
  • feat/woo-template
  • organize-tests
  • feat/add-show-rendered-method
  • devel
  • 2.1.0
  • 2.0.0
  • 1.1.0
  • 1.0.2
  • 1.0.1
  • 1.0
12 results

TestThemeResolver.php

Blame
  • ChainResolver.php 1.29 KiB
    <?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}");
        }
    
    }