CUrlRule
| Пакет | system.web |
|---|---|
| Наследование | class CUrlRule » CBaseUrlRule » CComponent |
| С момента | 1.0 |
| Исходный код | framework/web/CUrlManager.php |
Оно главным образом состоит из двух частей: маршрута и шаблона. Первая классифицирует правило, так что оно применяется только к определенному маршруту контроллера-действия. Вторая выполняет фактическое форматирование и разбор. Шаблон может иметь набор именованных параметров.
Свойства 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 |
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 при ошибке |
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 | ||
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 при ошибке |
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