Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Url/Resolver/Manager/ResolverManager.php
Строк: 57
<?php
namespace ConcreteCoreUrlResolverManager;

use 
ConcreteCoreUrlResolverUrlResolverInterface;

class 
ResolverManager implements ResolverManagerInterface
{

    protected 
$priorityTree;

    
/**
     * @var UrlResolverInterface
     */
    
protected $resolvers;

    
/**
     * @var string
     */
    
protected $default;

    
/**
     * @param string               $default_handle
     * @param URLResolverInterface $default_resolver
     */
    
public function __construct($default_handle = '', UrlResolverInterface $default_resolver = null)
    {
        if (
$default_resolver) {
            
$this->addResolver($default_handle, $default_resolver);
        }

        
$this->default = $default_handle;
    }

    
/**
     * {@inheritdoc}
     */
    
public function addResolver(
        
$handle,
        
UrlResolverInterface $resolver,
        
$priority = 512
    
) {
        
$priority = min(1024, max(1, intval($priority, 10)));

        
$this->resolvers[$handle] = $resolver;

        if (!isset(
$this->priorityTree[$priority])) {
            
$this->priorityTree[$priority] = array();
            
ksort($this->priorityTree);
        }
        
$this->priorityTree[$priority][] = $handle;
    }

    
/**
     * {@inheritdoc}
     */
    
public function getDefaultResolver()
    {
        return 
$this->getResolver($this->default);
    }

    
/**
     * {@inheritdoc}
     */
    
public function getResolver($handle)
    {
        return 
array_get($this->resolvers, $handle, null);
    }

    
/**
     * @return array
     */
    
public function getResolvers()
    {
        return 
$this->resolvers;
    }

    
/**
     * {@inheritdoc}
     */
    
public function resolve(array $args)
    {
        
$resolved = null;

        foreach (
$this->priorityTree as $list) {
            foreach (
$list as $handle) {
                if (
$handle == $this->default) {
                    continue;
                }
                
$resolver = $this->getResolver($handle);
                
$resolved = $resolver->resolve($args, $resolved);
            }
        }

        if (
$default = $this->getResolver($this->default)) {
            
$resolved = $default->resolve($args, $resolved);
        }

        return 
$resolved;
    }

}
Онлайн: 2
Реклама