Spec-Zone.ru › Yii 1.1

CUrlRule

Пакет system.web
Наследование class CUrlRule » CBaseUrlRule » CComponent
С момента 1.0
Исходный код framework/web/CUrlManager.php
CUrlRule представляет правило форматирования/разбора URL.

Оно главным образом состоит из двух частей: маршрута и шаблона. Первая классифицирует правило, так что оно применяется только к определенному маршруту контроллера-действия. Вторая выполняет фактическое форматирование и разбор. Шаблон может иметь набор именованных параметров.

Свойства Public

Свойство Тип Описание Определено
append boolean указывает, допускает ли URL дополнительные параметры в конце информации о пути. CUrlRule
caseSensitive boolean указывает, чувствительно ли правило к регистру. CUrlRule
defaultParams array стандартные параметры GET (имя=>значение), предоставляемые этим правилом. При использовании этого правила для разбора входящего запроса, значения, объявленные в этом свойстве, будут вставлены в $_GET. CUrlRule
hasHostInfo boolean указывает, должна ли информация о хосте учитываться для этого правила CUrlRule
matchValue boolean указывает, должны ли значения параметров GET соответствовать соответствующим подшаблонам в правиле при создании URL. По умолчанию равно null, т.е. используется значение CUrlManager::matchValue. Когда это свойство false, правило будет использоваться для создания URL, если его маршрут и имена параметров совпадают с заданными. Если это свойство true, то заданные значения параметров также должны соответствовать соответствующим подшаблонам параметров. Обратите внимание, что установка этого свойства в true снизит производительность. CUrlRule
params array список параметров (имя=>регулярное выражение) CUrlRule
parsingOnly boolean указывает, используется ли это правило только для разбора запроса. CUrlRule
pattern string регулярное выражение, используемое для разбора URL CUrlRule
references array отображение от имени параметра маршрута к имени маркера (например, _r1=><1>) CUrlRule
route string пара контроллера/действия CUrlRule
routePattern string шаблон, используемый для сопоставления маршрута CUrlRule
template string шаблон, используемый для построения URL CUrlRule
urlSuffix string суффикс URL, используемый для этого правила. CUrlRule
verb string HTTP-метод (например, GET, POST, DELETE), которому должно соответствовать это правило. CUrlRule

Методы Public

Метод Описание Определено
__call() Вызывает именованный метод, который не является методом класса. CComponent
__construct() Конструктор. CUrlRule
__get() Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. CComponent
__isset() Проверяет, является ли значение свойства нулевым. CComponent
__set() Устанавливает значение свойства компонента. CComponent
__unset() Устанавливает свойство компонента в значение null. CComponent
asa() Возвращает объект именованного поведения. CComponent
attachBehavior() Присоединяет поведение к этому компоненту. CComponent
attachBehaviors() Присоединяет список поведений к компоненту. CComponent
attachEventHandler() Присоединяет обработчик событий к событию. CComponent
canGetProperty() Определяет, может ли свойство быть прочитано. CComponent
canSetProperty() Определяет, может ли свойство быть установлено. CComponent
createUrl() Создает URL на основе этого правила. CUrlRule
detachBehavior() Отсоединяет поведение от компонента. CComponent
detachBehaviors() Отсоединяет все поведения от компонента. CComponent
detachEventHandler() Отсоединяет существующий обработчик событий. CComponent
disableBehavior() Отключает присоединенное поведение. CComponent
disableBehaviors() Отключает все присоединенные поведения. CComponent
enableBehavior() Включает присоединенное поведение. CComponent
enableBehaviors() Включает все присоединенные поведения. CComponent
evaluateExpression() Вычисляет PHP-выражение или обратный вызов в контексте этого компонента. CComponent
getEventHandlers() Возвращает список присоединенных обработчиков событий для события. CComponent
hasEvent() Определяет, определено ли событие. CComponent
hasEventHandler() Проверяет, имеет ли именованное событие присоединенные обработчики. CComponent
hasProperty() Определяет, определено ли свойство. CComponent
parseUrl() Разбирает URL на основе этого правила. CUrlRule
raiseEvent() Вызывает событие. CComponent

Методы Protected

Метод Описание Определено
escapeRegexpSpecialChars() Обратный вызов для preg_replace_callback в конструкторе CUrlRule

Подробности свойств

append свойство

public boolean $append;

указывает, допускает ли URL дополнительные параметры в конце информации о пути.

caseSensitive свойство

public boolean $caseSensitive;

указывает, чувствительно ли правило к регистру. По умолчанию null, что означает использование значения CUrlManager::caseSensitive.

defaultParams свойство

public array $defaultParams;

стандартные параметры GET (имя=>значение), предоставляемые этим правилом. При использовании этого правила для разбора входящего запроса, значения, объявленные в этом свойстве, будут вставлены в $_GET.

hasHostInfo свойство

public boolean $hasHostInfo;

указывает, должна ли информация о хосте учитываться для этого правила

matchValue свойство (доступно начиная с версии 1.1.0)

public boolean $matchValue;

указывает, должны ли значения параметров GET соответствовать соответствующим подшаблонам в правиле при создании URL. По умолчанию null, т.е. используется значение CUrlManager::matchValue. Когда это свойство false, правило будет использоваться для создания URL, если его маршрут и имена параметров совпадают с заданными. Если это свойство true, то заданные значения параметров также должны соответствовать соответствующим подшаблонам параметров. Обратите внимание, что установка этого свойства в true снизит производительность.

params свойство

public array $params;

список параметров (имя=>регулярное выражение)

parsingOnly свойство (доступно с версии v1.1.7)

public boolean $parsingOnly;

указывает, используется ли эта правила только для разбора запроса. По умолчанию значение false, что означает использование правила как для разбора, так и для создания URL.

pattern свойство

public string $pattern;

регулярное выражение, используемое для разбора URL

references свойство

public array $references;

отображение имени параметра маршрута на имя маркера (например, _r1=><1>)

route свойство

public string $route;

пара controller/action

routePattern свойство

public string $routePattern;

шаблон, используемый для сопоставления маршрута

template свойство

public string $template;

шаблон, используемый для построения URL

urlSuffix свойство

public string $urlSuffix;

суффикс URL, используемый для этого правила. Например, ".html" может быть использован для того, чтобы URL выглядел, как указывающий на статическую HTML-страницу. По умолчанию null, что означает использование значения CUrlManager::urlSuffix.

verb свойство (доступно с версии v1.1.7)

public string $verb;

HTTP-метод (например, GET, POST, DELETE), которому должно соответствовать это правило. Если это правило может соответствовать нескольким методам, разделите их запятыми. Если это свойство не установлено, правило может соответствовать любому методу. Обратите внимание, что это свойство используется только при разборе запроса. Оно игнорируется при создании URL.

Подробное описание методов

__construct() метод

public void __construct(string $route, string $pattern)
$route string маршрут URL (controller/action)
$pattern string шаблон для сопоставления URL
Исходный код: framework/web/CUrlManager.php#657 (показать)
public function __construct($route,$pattern)
{
    if(
is_array($route))
    {
        foreach(array(
'urlSuffix', 'caseSensitive', 'defaultParams', 'matchValue', 'verb', 'parsingOnly') as $name)
        {
            if(isset(
$route[$name]))
                
$this->$name=$route[$name];
        }
        if(isset(
$route['pattern']))
            
$pattern=$route['pattern'];
        
$route=$route[0];
    }
    
$this->route=trim($route,'/');

    
$tr2['/']=$tr['/']='\\/';

    if(
strpos($route,'<')!==false && preg_match_all('/<(\w+)>/',$route,$matches2))
    {
        foreach(
$matches2[1] as $name)
            
$this->references[$name]="<$name>";
    }

    
$this->hasHostInfo=!strncasecmp($pattern,'http://',7) || !strncasecmp($pattern,'https://',8);

    if(
$this->verb!==null)
        
$this->verb=preg_split('/[\s,]+/',strtoupper($this->verb),-1,PREG_SPLIT_NO_EMPTY);

    if(
preg_match_all('/<(\w+):?(.*?)?>/',$pattern,$matches))
    {
        
$tokens=array_combine($matches[1],$matches[2]);
        foreach(
$tokens as $name=>$value)
        {
            if(
$value==='')
                
$value='[^\/]+';
            
$tr["<$name>"]="(?P<$name>$value)";
            if(isset(
$this->references[$name]))
                
$tr2["<$name>"]=$tr["<$name>"];
            else
                
$this->params[$name]=$value;
        }
    }
    
$p=rtrim($pattern,'*');
    
$this->append=$p!==$pattern;
    
$p=trim($p,'/');
    
$this->template=preg_replace('/<(\w+):?.*?>/','<$1>',$p);
    
$p=$this->template;
    if(!
$this->parsingOnly)
        
$p=preg_replace_callback('/(?<=^|>)[^<]+(?=<|$)/',array($this,'escapeRegexpSpecialChars'),$p);
    
$this->pattern='/^'.strtr($p,$tr).'\/';
    if(
$this->append)
        
$this->pattern.='/u';
    else
        
$this->pattern.='$/u';

    if(
$this->references!==array())
        
$this->routePattern='/^'.strtr($this->route,$tr2).'$/u';

    if(
YII_DEBUG && @preg_match($this->pattern,'test')===false)
        throw new 
CException(Yii::t('yii','The URL pattern "{pattern}" for route "{route}" is not a valid regular expression.',
            array(
'{route}'=>$route,'{pattern}'=>$pattern)));
}

Конструктор.

createUrl() метод

public mixed createUrl(CUrlManager $manager, string $route, array $params, string $ampersand)
$manager CUrlManager менеджер
$route string маршрут
$params array список параметров
$ampersand string маркер, разделяющий имя-значение в URL.
{return} mixed созданный URL или false при ошибке
Исходный код: framework/web/CUrlManager.php#728 (показать)
public function createUrl($manager,$route,$params,$ampersand)
{
    if(
$this->parsingOnly)
        return 
false;

    if(
$manager->caseSensitive && $this->caseSensitive===null || $this->caseSensitive)
        
$case='';
    else
        
$case='i';

    
$tr=array();
    if(
$route!==$this->route)
    {
        if(
$this->routePattern!==null && preg_match($this->routePattern.$case,$route,$matches))
        {
            foreach(
$this->references as $key=>$name)
                
$tr[$name]=$matches[$key];
        }
        else
            return 
false;
    }

    foreach(
$this->defaultParams as $key=>$value)
    {
        if(isset(
$params[$key]))
        {
            if(
$params[$key]==$value)
                unset(
$params[$key]);
            else
                return 
false;
        }
    }

    foreach(
$this->params as $key=>$value)
        if(!isset(
$params[$key]))
            return 
false;

    if(
$manager->matchValue && $this->matchValue===null || $this->matchValue)
    {
        foreach(
$this->params as $key=>$value)
        {
            if(!
preg_match('/\A'.$value.'\z/u'.$case,$params[$key]))
                return 
false;
        }
    }

    foreach(
$this->params as $key=>$value)
    {
        
$tr["<$key>"]=urlencode($params[$key]);
        unset(
$params[$key]);
    }

    
$suffix=$this->urlSuffix===null ? $manager->urlSuffix : $this->urlSuffix;

    
$url=strtr($this->template,$tr);

    if(
$this->hasHostInfo)
    {
        
$hostInfo=Yii::app()->getRequest()->getHostInfo();
        if(
stripos($url,$hostInfo)===0)
            
$url=substr($url,strlen($hostInfo));
    }

    if(empty(
$params))
        return 
$url!=='' ? $url.$suffix : $url;

    if(
$this->append)
        
$url.='/'.$manager->createPathInfo($params,'/','/').$suffix;
    else
    {
        if(
$url!=='')
            
$url.=$suffix;
        
$url.='?'.$manager->createPathInfo($params,'=',$ampersand);
    }

    return 
$url;
}

Создаёт URL на основе этого правила.

escapeRegexpSpecialChars() метод

protected void escapeRegexpSpecialChars($matches)
$matches
Исходный код: framework/web/CUrlManager.php#646 (показать)
protected function escapeRegexpSpecialChars($matches)
{
    return 
preg_quote($matches[0]);
}

Обратный вызов для preg_replace_callback в конструкторе

parseUrl() метод

public mixed parseUrl(CUrlManager $manager, CHttpRequest $request, string $pathInfo, string $rawPathInfo)
$manager CUrlManager менеджер URL
$request CHttpRequest объект запроса
$pathInfo string часть URL, содержащая path info
$rawPathInfo string path info, содержащая потенциальный суффикс URL
{return} mixed маршрут, состоящий из идентификатора контроллера и идентификатора действия, или false при ошибке
Исходный код: framework/web/CUrlManager.php#814 (показать)
public function parseUrl($manager,$request,$pathInfo,$rawPathInfo)
{
    if(
$this->verb!==null && !in_array($request->getRequestType(), $this->verb, true))
        return 
false;

    if(
$manager->caseSensitive && $this->caseSensitive===null || $this->caseSensitive)
        
$case='';
    else
        
$case='i';

    if(
$this->urlSuffix!==null)
        
$pathInfo=$manager->removeUrlSuffix($rawPathInfo,$this->urlSuffix);

    
// URL suffix required, but not found in the requested URL
    
if($manager->useStrictParsing && $pathInfo===$rawPathInfo)
    {
        
$urlSuffix=$this->urlSuffix===null ? $manager->urlSuffix : $this->urlSuffix;
        if(
$urlSuffix!='' && $urlSuffix!=='/')
            return 
false;
    }

    if(
$this->hasHostInfo)
        
$pathInfo=strtolower($request->getHostInfo()).rtrim('/'.$pathInfo,'/');

    
$pathInfo.='/';

    if(
preg_match($this->pattern.$case,$pathInfo,$matches))
    {
        foreach(
$this->defaultParams as $name=>$value)
        {
            if(!isset(
$_GET[$name]))
                
$_REQUEST[$name]=$_GET[$name]=$value;
        }
        
$tr=array();
        foreach(
$matches as $key=>$value)
        {
            if(isset(
$this->references[$key]))
                
$tr[$this->references[$key]]=$value;
            elseif(isset(
$this->params[$key]))
                
$_REQUEST[$key]=$_GET[$key]=$value;
        }
        if(
$pathInfo!==$matches[0]) // there're additional GET params
            
$manager->parsePathInfo(ltrim(substr($pathInfo,strlen($matches[0])),'/'));
        if(
$this->routePattern!==null)
            return 
strtr($this->route,$tr);
        else
            return 
$this->route;
    }
    else
        return 
false;
}

Разбирает URL на основе этого правила.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CUrlRule

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API