Вход Регистрация
Файл: MobileCMS-2.7.0-beta/System/Kernel/Routing/Route.php
Строк: 103
<?php
/**
 * MobileCMS
 *
 * Open source content management system for mobile sites
 *
 * @author KpuTuK <bykputuk@ya.ru>
 * @copyright Copyright (c) 2015, MobileCMS Team
 * @license MIT License
 */

namespace SystemKernelRouting;

/**
 * Обьект роута
 * @author KpuTuK <bykputuk@ya.ru>
 * @version 1.0.0
 * @package MobileCMS
 * @category Routing component
 */
class Route extends ArrayObject {
    protected 
$patterns = [
        
'i' => '[0-9]+',
        
's' => '[a-zA-Z.-_%]+',
        
'x' => '[a-zA-Z0-9.-_%]+'
    
];
    
/**
     * Создает обьект роута с указанными параметрами
     * @param string $name Имя роута
     * @param string $pattern prce паттерн обработки
     * @param string $handler Обработчик роута вида класс@метод
     * @param array $methods Массив методов запроса роута
     * @param array $params Дополнительные параметры передаваемые в экшен
     */
    
public function __construct(
        
$name
        
$pattern
        
$handler
        array 
$methods = [],
        array 
$params = []) {
        
parent::__construct([
            
'name' => $name,
            
'pattern' => $pattern,
            
'handler' => $handler,
            
'methods' => $methods,
            
'params' => $params
        
]);
    }
    public function 
offsetSet($index$newval) {
        
$this->validateIndex($index);
        
parent::offsetSet($index$newval);
    }
    public function 
offsetExists($index) {
        
$this->validateIndex($index);
        
parent::offsetExists($index);
    }
    public function 
offsetGet($index) {
        
$this->validateIndex($index);
        return 
parent::offsetGet($index);
    }
    public function 
offsetUnset($index) {
        
$this->validateIndex($index);
        
parent::offsetUnset($index);
    }
    public function 
compile() {
        if (
false === strpos($this['pattern'], '{')) {
            return [
                
'pattern' => $this['pattern'],
                
'match' => false
                
'params' => $this['params']
            ];
        }
        
$route $this;
        return [ 
            
'pattern' => preg_replace_callback('#{(w+):(w+)}#'
            function(
$match) use ($route) {
                list(, 
$name$prce) = $match;
                return 
'(?<'.$name.'>'.strtr($prce$route->patterns).')';
            }, 
rtrim($this['pattern'], '/')
        ),
            
'match' => true,
            
'params' => $this['params']
        ];
    }
    protected function 
validateIndex($index) {
        if ( ! 
in_array(
            
$index, ['name''pattern''handler''methods''params']
        )) {
            throw new 
InvalidArgumentException(sprintf(
                
'Ожидался параметр "%s" вместо "%s"!'
                
implode(
                    
'|', ['name''pattern''handler''methods''params']
                ),
                
$index
            
));
        }
    }
}
Онлайн: 2
Реклама