Вход Регистрация
Файл: Routing-1.0.0/PositiveCode/Routing/Route.php
Строк: 110
<?php
/**
 * PositiveCode Tools
 *
 * @author KpuTuK <bykputuk@ya.ru>
 * @copyright Copyright (c) 2016, PositiveCode Team
 * @license MIT License
 */

namespace PositiveCodeRouting;

/**
 * Обьект роута
 * @author KpuTuK <bykputuk@ya.ru>
 * @version 1.0.0
 * @package PositiveCode Tools
 */
class Route extends ArrayObject {
    protected 
$patterns = [
        
'i' => '[0-9]+',
        
's' => '[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
        
]);
    }
    
/**
     * Схраняет параметр роута
     * @param string $index Имя параметра
     * @param mixed $newval Значение параметра
     */
    
public function offsetSet($index$newval) {
        
$this->validateIndex($index);
        
parent::offsetSet($index$newval);
    }
    
/**
     * Проверяет наличие параметра роута 
     * @param string $index Имя параметра
     */
    
public function offsetExists($index) {
        
$this->validateIndex($index);
        
parent::offsetExists($index);
    }
    
/**
     * Взвращает параметр роута
     * @param string $index Имя параметра
     * @return mixed Значение параметра
     */
    
public function offsetGet($index) {
        
$this->validateIndex($index);
        return 
parent::offsetGet($index);
    }
    
/**
     * Удаляет параметр роута
     * @param string $index Имя параметра
     */
    
public function offsetUnset($index) {
        
$this->validateIndex($index);
        
parent::offsetUnset($index);
    }
    
/**
     * Компилирует prce шаблон роута и возвращает массив данных роута
     * @return array
     */
    
public function compile() {
        if (
false === strpos($this['pattern'], '{')) {
            return [
                
'pattern' => $this['pattern'],
                
'match' => false
                
'params' => $this['params']
            ];
        }
        
$route $this;
        return [ 
            
'pattern' => rtrim(preg_replace_callback('#{(w+):(w+)}#'
                function(
$match) use ($route) {
                    list(, 
$name$prce) = $match;
                    return 
'(?<'.$name.'>'.strtr($prce$route->patterns).')';
                }, 
$this['pattern']), 
            
'/'),
            
'match' => true,
            
'params' => $this['params']
        ];
    }
    
/**
     * Прверяет имя параметра
     * @param string $index Имя параметра
     * @throws InvalidArgumentException
     */
    
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
            
));
        }
    }
}
Онлайн: 1
Реклама