Файл: 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
));
}
}
}