Class luya\web\UrlManager
Inheritance | luya\web\UrlManager » yii\web\UrlManager » yii\base\Component » yii\base\BaseObject |
---|---|
Implements | yii\base\Configurable |
Available since version | 1.0.0 |
Source Code | https://github.com/luyadev/luya/blob/master/core/web/UrlManager.php |
Extended LUYA UrlManager.
UrlManger extends the Yii2 Url Manager by resolving composition informations while parseRequest and provides other helper methods.
Public Properties
Property | Type | Description | Defined By |
---|---|---|---|
$baseUrl | string | The base URL that is used by createUrl() to prepend to created URLs. | yii\web\UrlManager |
$behaviors | yii\base\Behavior[] | List of behaviors attached to this component. | yii\base\Component |
$cache | yii\caching\CacheInterface|array|string|boolean | The cache object or the application component ID of the cache object. | yii\web\UrlManager |
$composition | luya\web\Composition | The composition component if registered. | luya\web\UrlManager |
$contextNavItemId | integer | In order to build urls, the nav item id from cms module can be stored in the UrlManager as $contextNavItemId . |
luya\web\UrlManager |
$enablePrettyUrl | boolean | Pretty urls are enabled by default and can not be turned off in luya cms context. | luya\web\UrlManager |
$enableStrictParsing | boolean | Whether to enable strict parsing. | yii\web\UrlManager |
$hostInfo | string | The host info (e.g. https://www.example.com ) that is used by createAbsoluteUrl() to prepend to created URLs. |
yii\web\UrlManager |
$menu | boolean|luya\cms\Menu | The menu componet if registered. | luya\web\UrlManager |
$normalizer | yii\web\UrlNormalizer|array|string|false | The configuration for yii\web\UrlNormalizer used by this UrlManager. | yii\web\UrlManager |
$overrideLanguage | boolean | Whether the {{luya\web\Composition}} resolved value should override Yii::$app->language or not. |
luya\web\UrlManager |
$routeParam | string | The GET parameter name for route. | yii\web\UrlManager |
$ruleConfig | array | The default url rule configuration uses the {{\luya\web\UrlRule}} class. | luya\web\UrlManager |
$rules | array | The rules for creating and parsing URLs when $enablePrettyUrl is true . |
yii\web\UrlManager |
$scriptUrl | string | The entry script URL that is used by createUrl() to prepend to created URLs. | yii\web\UrlManager |
$showScriptName | boolean | As mod rewrite is required by a LUYA cms instance the script name must be turned off by default. | luya\web\UrlManager |
$suffix | string | The URL suffix used when $enablePrettyUrl is true . |
yii\web\UrlManager |
Protected Properties
Property | Type | Description | Defined By |
---|---|---|---|
$cacheKey | string | The cache key for cached rules | yii\web\UrlManager |
Public Methods
Method | Description | Defined By |
---|---|---|
__call() | Calls the named method which is not a class method. | yii\base\Component |
__clone() | This method is called after the object is created by cloning an existing one. | yii\base\Component |
__construct() | Constructor. | yii\base\BaseObject |
__get() | Returns the value of a component property. | yii\base\Component |
__isset() | Checks if a property is set, i.e. defined and not null. | yii\base\Component |
__set() | Sets the value of a component property. | yii\base\Component |
__unset() | Sets a component property to be null. | yii\base\Component |
addRules() | Extend functionality of parent::addRules by the ability to add composition routes. | luya\web\UrlManager |
attachBehavior() | Attaches a behavior to this component. | yii\base\Component |
attachBehaviors() | Attaches a list of behaviors to the component. | yii\base\Component |
behaviors() | Returns a list of behaviors that this component should behave as. | yii\base\Component |
canGetProperty() | Returns a value indicating whether a property can be read. | yii\base\Component |
canSetProperty() | Returns a value indicating whether a property can be set. | yii\base\Component |
className() | Returns the fully qualified name of this class. | yii\base\BaseObject |
createAbsoluteUrl() | Creates an absolute URL using the given route and query parameters. | yii\web\UrlManager |
createMenuItemUrl() | Create an url for a menu item. | luya\web\UrlManager |
createUrl() | Extend createUrl method by verify its context implementation to add cms urls prepand to the requested createurl params. | luya\web\UrlManager |
detachBehavior() | Detaches a behavior from the component. | yii\base\Component |
detachBehaviors() | Detaches all behaviors from the component. | yii\base\Component |
ensureBehaviors() | Makes sure that the behaviors declared in behaviors() are attached to this component. | yii\base\Component |
getBaseUrl() | Returns the base URL that is used by createUrl() to prepend to created URLs. | yii\web\UrlManager |
getBehavior() | Returns the named behavior object. | yii\base\Component |
getBehaviors() | Returns all behaviors attached to this component. | yii\base\Component |
getComposition() | Get the composition component | luya\web\UrlManager |
getHostInfo() | Returns the host info that is used by createAbsoluteUrl() to prepend to created URLs. | yii\web\UrlManager |
getMenu() | Get the menu component if its registered in the current applications. | luya\web\UrlManager |
getScriptUrl() | Returns the entry script URL that is used by createUrl() to prepend to created URLs. | yii\web\UrlManager |
hasEventHandlers() | Returns a value indicating whether there is any handler attached to the named event. | yii\base\Component |
hasMethod() | Returns a value indicating whether a method is defined. | yii\base\Component |
hasProperty() | Returns a value indicating whether a property is defined for this component. | yii\base\Component |
init() | Initializes UrlManager. | yii\web\UrlManager |
internalCreateAbsoluteUrl() | Create absolute url from the given route params. | luya\web\UrlManager |
internalCreateUrl() | Yii2 createUrl base implementation extends the prepand of the comosition | luya\web\UrlManager |
off() | Detaches an existing event handler from this component. | yii\base\Component |
on() | Attaches an event handler to an event. | yii\base\Component |
parseRequest() | Extend functionality of parent::parseRequest() by verify and resolve the composition informations. | luya\web\UrlManager |
prependBaseUrl() | Prepand the base url to an existing route | luya\web\UrlManager |
removeBaseUrl() | Remove the base url from a route | luya\web\UrlManager |
routeHasLanguageCompositionPrefix() | Ensure whether a route starts with a language short key or not. | luya\web\UrlManager |
setBaseUrl() | Sets the base URL that is used by createUrl() to prepend to created URLs. | yii\web\UrlManager |
setComposition() | Setter method for the composition component. | luya\web\UrlManager |
setHostInfo() | Sets the host info that is used by createAbsoluteUrl() to prepend to created URLs. | yii\web\UrlManager |
setScriptUrl() | Sets the entry script URL that is used by createUrl() to prepend to created URLs. | yii\web\UrlManager |
trigger() | Triggers an event. | yii\base\Component |
Protected Methods
Method | Description | Defined By |
---|---|---|
buildRules() | Builds URL rule objects from the given rule declarations. | yii\web\UrlManager |
canBeCached() | Returns the value indicating whether result of createUrl() of rule should be cached in internal cache. | yii\web\UrlManager |
getBuiltRulesFromCache() | Provides the built URL rules that are associated with the $ruleDeclarations from cache. | yii\web\UrlManager |
getUrlFromCache() | Get URL from internal cache if exists. | yii\web\UrlManager |
setBuiltRulesCache() | Stores $builtRules to cache, using $rulesDeclaration as a part of cache key. | yii\web\UrlManager |
setRuleToCache() | Store rule (e.g. yii\web\UrlRule) to internal cache. | yii\web\UrlManager |
Property Details
The composition component if registered.
Pretty urls are enabled by default and can not be turned off in luya cms context.
Whether the {{luya\web\Composition}} resolved value should override Yii::$app->language
or not.
The default url rule configuration uses the {{\luya\web\UrlRule}} class.
As mod rewrite is required by a LUYA cms instance the script name must be turned off by default.
Method Details
Defined in: yii\base\Component::__call()
Calls the named method which is not a class method.
This method will check if any attached behavior has the named method and will execute it if available.
Do not call this method directly as it is a PHP magic method that will be implicitly called when an unknown method is being invoked.
public mixed __call ( $name, $params ) | ||
$name | string |
The method name |
$params | array |
Method parameters |
return | mixed |
The method return value |
---|---|---|
throws | yii\base\UnknownMethodException |
when calling unknown method |
public function __call($name, $params)
{
$this->ensureBehaviors();
foreach ($this->_behaviors as $object) {
if ($object->hasMethod($name)) {
return call_user_func_array([$object, $name], $params);
}
}
throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}
Defined in: yii\base\Component::__clone()
This method is called after the object is created by cloning an existing one.
It removes all behaviors because they are attached to the old object.
public void __clone ( ) |
public function __clone()
{
$this->_events = [];
$this->_eventWildcards = [];
$this->_behaviors = null;
}
Defined in: yii\base\BaseObject::__construct()
Constructor.
The default implementation does two things:
- Initializes the object with the given configuration
$config
. - Call init().
If this method is overridden in a child class, it is recommended that
- the last parameter of the constructor is a configuration array, like
$config
here. - call the parent implementation at the end of the constructor.
public void __construct ( $config = [] ) | ||
$config | array |
Name-value pairs that will be used to initialize the object properties |
public function __construct($config = [])
{
if (!empty($config)) {
Yii::configure($this, $config);
}
$this->init();
}
Defined in: yii\base\Component::__get()
Returns the value of a component property.
This method will check in the following order and act accordingly:
- a property defined by a getter: return the getter result
- a property of a behavior: return the behavior property value
Do not call this method directly as it is a PHP magic method that
will be implicitly called when executing $value = $component->property;
.
See also __set().
public mixed __get ( $name ) | ||
$name | string |
The property name |
return | mixed |
The property value or the value of a behavior's property |
---|---|---|
throws | yii\base\UnknownPropertyException |
if the property is not defined |
throws | yii\base\InvalidCallException |
if the property is write-only. |
public function __get($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
// read property, e.g. getName()
return $this->$getter();
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name)) {
return $behavior->$name;
}
}
if (method_exists($this, 'set' . $name)) {
throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}
Defined in: yii\base\Component::__isset()
Checks if a property is set, i.e. defined and not null.
This method will check in the following order and act accordingly:
- a property defined by a setter: return whether the property is set
- a property of a behavior: return whether the property is set
- return
false
for non existing properties
Do not call this method directly as it is a PHP magic method that
will be implicitly called when executing isset($component->property)
.
public boolean __isset ( $name ) | ||
$name | string |
The property name or the event name |
return | boolean |
Whether the named property is set |
---|
public function __isset($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter() !== null;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name)) {
return $behavior->$name !== null;
}
}
return false;
}
Defined in: yii\base\Component::__set()
Sets the value of a component property.
This method will check in the following order and act accordingly:
- a property defined by a setter: set the property value
- an event in the format of "on xyz": attach the handler to the event "xyz"
- a behavior in the format of "as xyz": attach the behavior named as "xyz"
- a property of a behavior: set the behavior property value
Do not call this method directly as it is a PHP magic method that
will be implicitly called when executing $component->property = $value;
.
See also __get().
public void __set ( $name, $value ) | ||
$name | string |
The property name or the event name |
$value | mixed |
The property value |
throws | yii\base\UnknownPropertyException |
if the property is not defined |
---|---|---|
throws | yii\base\InvalidCallException |
if the property is read-only. |
public function __set($name, $value)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
// set property
$this->$setter($value);
return;
} elseif (strncmp($name, 'on ', 3) === 0) {
// on event: attach event handler
$this->on(trim(substr($name, 3)), $value);
return;
} elseif (strncmp($name, 'as ', 3) === 0) {
// as behavior: attach behavior
$name = trim(substr($name, 3));
$this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
return;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name)) {
$behavior->$name = $value;
return;
}
}
if (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}
Defined in: yii\base\Component::__unset()
Sets a component property to be null.
This method will check in the following order and act accordingly:
- a property defined by a setter: set the property value to be null
- a property of a behavior: set the property value to be null
Do not call this method directly as it is a PHP magic method that
will be implicitly called when executing unset($component->property)
.
public void __unset ( $name ) | ||
$name | string |
The property name |
throws | yii\base\InvalidCallException |
if the property is read only. |
---|
public function __unset($name)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter(null);
return;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name)) {
$behavior->$name = null;
return;
}
}
throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}
Extend functionality of parent::addRules by the ability to add composition routes.
See also yii\web\UrlManager::addRules().
public void addRules ( $rules, $append = true ) | ||
$rules | array |
An array wil rules |
$append | boolean |
Append to the end of the rules or not. |
public function addRules($rules, $append = true)
{
foreach ($rules as $key => $rule) {
if (is_array($rule) && isset($rule['composition'])) {
foreach ($rule['composition'] as $composition => $pattern) {
$rules[] = [
'pattern' => $pattern,
'route' => $composition.'/'.$rule['route'],
];
}
}
}
return parent::addRules($rules, $append);
}
Defined in: yii\base\Component::attachBehavior()
Attaches a behavior to this component.
This method will create the behavior object based on the given configuration. After that, the behavior object will be attached to this component by calling the yii\base\Behavior::attach() method.
See also detachBehavior().
public yii\base\Behavior attachBehavior ( $name, $behavior ) | ||
$name | string |
The name of the behavior. |
$behavior | string|array|yii\base\Behavior |
The behavior configuration. This can be one of the following:
|
return | yii\base\Behavior |
The behavior object |
---|
public function attachBehavior($name, $behavior)
{
$this->ensureBehaviors();
return $this->attachBehaviorInternal($name, $behavior);
}
Defined in: yii\base\Component::attachBehaviors()
Attaches a list of behaviors to the component.
Each behavior is indexed by its name and should be a yii\base\Behavior object, a string specifying the behavior class, or an configuration array for creating the behavior.
See also attachBehavior().
public void attachBehaviors ( $behaviors ) | ||
$behaviors | array |
List of behaviors to be attached to the component |
public function attachBehaviors($behaviors)
{
$this->ensureBehaviors();
foreach ($behaviors as $name => $behavior) {
$this->attachBehaviorInternal($name, $behavior);
}
}
Defined in: yii\base\Component::behaviors()
Returns a list of behaviors that this component should behave as.
Child classes may override this method to specify the behaviors they want to behave as.
The return value of this method should be an array of behavior objects or configurations indexed by behavior names. A behavior configuration can be either a string specifying the behavior class or an array of the following structure:
'behaviorName' => [
'class' => 'BehaviorClass',
'property1' => 'value1',
'property2' => 'value2',
]
Note that a behavior class must extend from yii\base\Behavior. Behaviors can be attached using a name or anonymously. When a name is used as the array key, using this name, the behavior can later be retrieved using getBehavior() or be detached using detachBehavior(). Anonymous behaviors can not be retrieved or detached.
Behaviors declared in this method will be attached to the component automatically (on demand).
public array behaviors ( ) | ||
return | array |
The behavior configurations. |
---|
public function behaviors()
{
return [];
}
Defined in: yii\web\UrlManager::buildRules()
Builds URL rule objects from the given rule declarations.
protected yii\web\UrlRuleInterface[] buildRules ( $ruleDeclarations ) | ||
$ruleDeclarations | array |
The rule declarations. Each array element represents a single rule declaration. Please refer to $rules for the acceptable rule formats. |
return | yii\web\UrlRuleInterface[] |
The rule objects built from the given rule declarations |
---|---|---|
throws | yii\base\InvalidConfigException |
if a rule declaration is invalid |
protected function buildRules($ruleDeclarations)
{
$builtRules = $this->getBuiltRulesFromCache($ruleDeclarations);
if ($builtRules !== false) {
return $builtRules;
}
$builtRules = [];
$verbs = 'GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS';
foreach ($ruleDeclarations as $key => $rule) {
if (is_string($rule)) {
$rule = ['route' => $rule];
if (preg_match("/^((?:($verbs),)*($verbs))\\s+(.*)$/", $key, $matches)) {
$rule['verb'] = explode(',', $matches[1]);
$key = $matches[4];
}
$rule['pattern'] = $key;
}
if (is_array($rule)) {
$rule = Yii::createObject(array_merge($this->ruleConfig, $rule));
}
if (!$rule instanceof UrlRuleInterface) {
throw new InvalidConfigException('URL rule class must implement UrlRuleInterface.');
}
$builtRules[] = $rule;
}
$this->setBuiltRulesCache($ruleDeclarations, $builtRules);
return $builtRules;
}
Defined in: yii\web\UrlManager::canBeCached()
Returns the value indicating whether result of createUrl() of rule should be cached in internal cache.
See also:
protected boolean canBeCached ( yii\web\UrlRuleInterface $rule ) | ||
$rule | yii\web\UrlRuleInterface | |
return | boolean |
|
---|
protected function canBeCached(UrlRuleInterface $rule)
{
return
// if rule does not provide info about create status, we cache it every time to prevent bugs like #13350
// @see https://github.com/yiisoft/yii2/pull/13350#discussion_r114873476
!method_exists($rule, 'getCreateUrlStatus') || ($status = $rule->getCreateUrlStatus()) === null
|| $status === UrlRule::CREATE_STATUS_SUCCESS
|| $status & UrlRule::CREATE_STATUS_PARAMS_MISMATCH;
}
Defined in: yii\base\Component::canGetProperty()
Returns a value indicating whether a property can be read.
A property can be read if:
- the class has a getter method associated with the specified name (in this case, property name is case-insensitive);
- the class has a member variable with the specified name (when
$checkVars
is true); - an attached behavior has a readable property of the given name (when
$checkBehaviors
is true).
See also canSetProperty().
public boolean canGetProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
The property name |
$checkVars | boolean |
Whether to treat member variables as properties |
$checkBehaviors | boolean |
Whether to treat behaviors' properties as properties of this component |
return | boolean |
Whether the property can be read |
---|
public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name, $checkVars)) {
return true;
}
}
}
return false;
}
Defined in: yii\base\Component::canSetProperty()
Returns a value indicating whether a property can be set.
A property can be written if:
- the class has a setter method associated with the specified name (in this case, property name is case-insensitive);
- the class has a member variable with the specified name (when
$checkVars
is true); - an attached behavior has a writable property of the given name (when
$checkBehaviors
is true).
See also canGetProperty().
public boolean canSetProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
The property name |
$checkVars | boolean |
Whether to treat member variables as properties |
$checkBehaviors | boolean |
Whether to treat behaviors' properties as properties of this component |
return | boolean |
Whether the property can be written |
---|
public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name, $checkVars)) {
return true;
}
}
}
return false;
}
::class
instead.
Defined in: yii\base\BaseObject::className()
Returns the fully qualified name of this class.
public static string className ( ) | ||
return | string |
The fully qualified name of this class. |
---|
public static function className()
{
return get_called_class();
}
Defined in: yii\web\UrlManager::createAbsoluteUrl()
Creates an absolute URL using the given route and query parameters.
This method prepends the URL created by createUrl() with the $hostInfo.
Note that unlike yii\helpers\Url::toRoute(), this method always treats the given route as an absolute route.
See also createUrl().
public string createAbsoluteUrl ( $params, $scheme = null ) | ||
$params | string|array |
Use a string to represent a route (e.g. |
$scheme | string|null |
The scheme to use for the URL (either |
return | string |
The created URL |
---|
public function createAbsoluteUrl($params, $scheme = null)
{
$params = (array) $params;
$url = $this->createUrl($params);
if (strpos($url, '://') === false) {
$hostInfo = $this->getHostInfo();
if (strncmp($url, '//', 2) === 0) {
$url = substr($hostInfo, 0, strpos($hostInfo, '://')) . ':' . $url;
} else {
$url = $hostInfo . $url;
}
}
return Url::ensureScheme($url, $scheme);
}
Create an url for a menu item.
public string createMenuItemUrl ( $params, $navItemId, $composition = null, $scheme = false ) | ||
$params | string|array |
Use a string to represent a route (e.g. |
$navItemId | integer |
The nav item Id |
$composition | null|luya\web\Composition |
Optional other composition config instead of using the default composition |
$scheme | boolean |
Whether to use absolute scheme path or not. This can be either |
public function createMenuItemUrl($params, $navItemId, $composition = null, $scheme = false)
{
$composition = empty($composition) ? $this->getComposition() : $composition;
$url = $scheme ? $this->internalCreateAbsoluteUrl($params, $scheme, $composition) : $this->internalCreateUrl($params, $composition);
if (!$this->menu) {
return $url;
}
return $this->urlReplaceModule($url, $navItemId, $composition);
}
Extend createUrl method by verify its context implementation to add cms urls prepand to the requested createurl params.
From the original create url function of Yii:
You may specify the route as a string, e.g., site/index
. You may also use an array
if you want to specify additional query parameters for the URL being created. The
array format must be:
// generates: /index.php?r=site%2Findex¶m1=value1¶m2=value2
['site/index', 'param1' => 'value1', 'param2' => 'value2']
If you want to create a URL with an anchor, you can use the array format with a #
parameter.
For example,
// generates: /index.php?r=site%2Findex¶m1=value1#name
['site/index', 'param1' => 'value1', '#' => 'name']
The URL created is a relative one. Use createAbsoluteUrl() to create an absolute URL.
Note that unlike {{luya\helpers\Url::toRoute()}}, this method always treats the given route as an absolute route.
See also yii\web\UrlManager::createUrl().
public string createUrl ( $params ) | ||
$params | string|array |
Use a string to represent a route (e.g. |
return | string |
The created URL. |
---|
public function createUrl($params)
{
$response = $this->internalCreateUrl($params);
if ($this->contextNavItemId) {
return $this->urlReplaceModule($response, $this->contextNavItemId, $this->getComposition());
}
return $response;
}
Defined in: yii\base\Component::detachBehavior()
Detaches a behavior from the component.
The behavior's yii\base\Behavior::detach() method will be invoked.
public yii\base\Behavior|null detachBehavior ( $name ) | ||
$name | string |
The behavior's name. |
return | yii\base\Behavior|null |
The detached behavior. Null if the behavior does not exist. |
---|
public function detachBehavior($name)
{
$this->ensureBehaviors();
if (isset($this->_behaviors[$name])) {
$behavior = $this->_behaviors[$name];
unset($this->_behaviors[$name]);
$behavior->detach();
return $behavior;
}
return null;
}
Defined in: yii\base\Component::detachBehaviors()
Detaches all behaviors from the component.
public void detachBehaviors ( ) |
public function detachBehaviors()
{
$this->ensureBehaviors();
foreach ($this->_behaviors as $name => $behavior) {
$this->detachBehavior($name);
}
}
Defined in: yii\base\Component::ensureBehaviors()
Makes sure that the behaviors declared in behaviors() are attached to this component.
public void ensureBehaviors ( ) |
public function ensureBehaviors()
{
if ($this->_behaviors === null) {
$this->_behaviors = [];
foreach ($this->behaviors() as $name => $behavior) {
$this->attachBehaviorInternal($name, $behavior);
}
}
}
Defined in: yii\web\UrlManager::getBaseUrl()
Returns the base URL that is used by createUrl() to prepend to created URLs.
It defaults to yii\web\Request::$baseUrl.
This is mainly used when $enablePrettyUrl is true
and $showScriptName is false
.
public string getBaseUrl ( ) | ||
return | string |
The base URL that is used by createUrl() to prepend to created URLs. |
---|---|---|
throws | yii\base\InvalidConfigException |
if running in console application and $baseUrl is not configured. |
public function getBaseUrl()
{
if ($this->_baseUrl === null) {
$request = Yii::$app->getRequest();
if ($request instanceof Request) {
$this->_baseUrl = $request->getBaseUrl();
} else {
throw new InvalidConfigException('Please configure UrlManager::baseUrl correctly as you are running a console application.');
}
}
return $this->_baseUrl;
}
Defined in: yii\base\Component::getBehavior()
Returns the named behavior object.
public yii\base\Behavior|null getBehavior ( $name ) | ||
$name | string |
The behavior name |
return | yii\base\Behavior|null |
The behavior object, or null if the behavior does not exist |
---|
public function getBehavior($name)
{
$this->ensureBehaviors();
return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}
Defined in: yii\base\Component::getBehaviors()
Returns all behaviors attached to this component.
public yii\base\Behavior[] getBehaviors ( ) | ||
return | yii\base\Behavior[] |
List of behaviors attached to this component |
---|
public function getBehaviors()
{
$this->ensureBehaviors();
return $this->_behaviors;
}
Defined in: yii\web\UrlManager::getBuiltRulesFromCache()
Provides the built URL rules that are associated with the $ruleDeclarations from cache.
protected yii\web\UrlRuleInterface[]|false getBuiltRulesFromCache ( $ruleDeclarations ) | ||
$ruleDeclarations | array |
The rule declarations. Each array element represents a single rule declaration. Please refer to $rules for the acceptable rule formats. |
return | yii\web\UrlRuleInterface[]|false |
The rule objects built from the given rule declarations or boolean |
---|
protected function getBuiltRulesFromCache($ruleDeclarations)
{
$cache = $this->ensureCache();
if (!$cache) {
return false;
}
return $cache->get([$this->cacheKey, $this->ruleConfig, $ruleDeclarations]);
}
Get the composition component
public luya\web\Composition getComposition ( ) | ||
return | luya\web\Composition |
Get the composition component to resolve multi lingual handling. |
---|
public function getComposition()
{
if ($this->_composition === null) {
$this->_composition = Yii::$app->get('composition');
}
return $this->_composition;
}
Defined in: yii\web\UrlManager::getHostInfo()
Returns the host info that is used by createAbsoluteUrl() to prepend to created URLs.
public string getHostInfo ( ) | ||
return | string |
The host info (e.g. |
---|---|---|
throws | yii\base\InvalidConfigException |
if running in console application and $hostInfo is not configured. |
public function getHostInfo()
{
if ($this->_hostInfo === null) {
$request = Yii::$app->getRequest();
if ($request instanceof \yii\web\Request) {
$this->_hostInfo = $request->getHostInfo();
} else {
throw new InvalidConfigException('Please configure UrlManager::hostInfo correctly as you are running a console application.');
}
}
return $this->_hostInfo;
}
Get the menu component if its registered in the current applications.
The menu component is only registered when the cms module is registered.
public boolean|luya\cms\Menu getMenu ( ) | ||
return | boolean|luya\cms\Menu |
The menu component object or false if not available. |
---|
public function getMenu()
{
if ($this->_menu === null) {
$menu = Yii::$app->get('menu', false);
if ($menu) {
$this->_menu = $menu;
} else {
$this->_menu = false;
}
}
return $this->_menu;
}
Defined in: yii\web\UrlManager::getScriptUrl()
Returns the entry script URL that is used by createUrl() to prepend to created URLs.
It defaults to yii\web\Request::$scriptUrl.
This is mainly used when $enablePrettyUrl is false
or $showScriptName is true
.
public string getScriptUrl ( ) | ||
return | string |
The entry script URL that is used by createUrl() to prepend to created URLs. |
---|---|---|
throws | yii\base\InvalidConfigException |
if running in console application and $scriptUrl is not configured. |
public function getScriptUrl()
{
if ($this->_scriptUrl === null) {
$request = Yii::$app->getRequest();
if ($request instanceof Request) {
$this->_scriptUrl = $request->getScriptUrl();
} else {
throw new InvalidConfigException('Please configure UrlManager::scriptUrl correctly as you are running a console application.');
}
}
return $this->_scriptUrl;
}
Defined in: yii\web\UrlManager::getUrlFromCache()
Get URL from internal cache if exists.
See also createUrl().
protected boolean|string getUrlFromCache ( $cacheKey, $route, $params ) | ||
$cacheKey | string |
Generated cache key to store data. |
$route | string |
The route (e.g. |
$params | array |
Rule params. |
return | boolean|string |
The created URL |
---|
protected function getUrlFromCache($cacheKey, $route, $params)
{
if (!empty($this->_ruleCache[$cacheKey])) {
foreach ($this->_ruleCache[$cacheKey] as $rule) {
/* @var $rule UrlRule */
if (($url = $rule->createUrl($this, $route, $params)) !== false) {
return $url;
}
}
} else {
$this->_ruleCache[$cacheKey] = [];
}
return false;
}
Defined in: yii\base\Component::hasEventHandlers()
Returns a value indicating whether there is any handler attached to the named event.
public boolean hasEventHandlers ( $name ) | ||
$name | string |
The event name |
return | boolean |
Whether there is any handler attached to the event. |
---|
public function hasEventHandlers($name)
{
$this->ensureBehaviors();
if (!empty($this->_events[$name])) {
return true;
}
foreach ($this->_eventWildcards as $wildcard => $handlers) {
if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
return true;
}
}
return Event::hasHandlers($this, $name);
}
Defined in: yii\base\Component::hasMethod()
Returns a value indicating whether a method is defined.
A method is defined if:
- the class has a method with the specified name
- an attached behavior has a method with the given name (when
$checkBehaviors
is true).
public boolean hasMethod ( $name, $checkBehaviors = true ) | ||
$name | string |
The property name |
$checkBehaviors | boolean |
Whether to treat behaviors' methods as methods of this component |
return | boolean |
Whether the method is defined |
---|
public function hasMethod($name, $checkBehaviors = true)
{
if (method_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->hasMethod($name)) {
return true;
}
}
}
return false;
}
Defined in: yii\base\Component::hasProperty()
Returns a value indicating whether a property is defined for this component.
A property is defined if:
- the class has a getter or setter method associated with the specified name (in this case, property name is case-insensitive);
- the class has a member variable with the specified name (when
$checkVars
is true); - an attached behavior has a property of the given name (when
$checkBehaviors
is true).
See also:
public boolean hasProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
The property name |
$checkVars | boolean |
Whether to treat member variables as properties |
$checkBehaviors | boolean |
Whether to treat behaviors' properties as properties of this component |
return | boolean |
Whether the property is defined |
---|
public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}
Defined in: yii\web\UrlManager::init()
Initializes UrlManager.
public void init ( ) |
public function init()
{
parent::init();
if ($this->normalizer !== false) {
$this->normalizer = Yii::createObject($this->normalizer);
if (!$this->normalizer instanceof UrlNormalizer) {
throw new InvalidConfigException('`' . get_class($this) . '::normalizer` should be an instance of `' . UrlNormalizer::className() . '` or its DI compatible configuration.');
}
}
if (!$this->enablePrettyUrl) {
return;
}
if (!empty($this->rules)) {
$this->rules = $this->buildRules($this->rules);
}
}
Create absolute url from the given route params.
public string internalCreateAbsoluteUrl ( $params, $scheme = null, $composition = null ) | ||
$params | string|array |
The see createUrl |
$scheme | boolean |
Whether to use absolute scheme path or not. |
$composition | null|luya\web\Composition |
Composition instance to change the route behavior |
return | string |
The created url |
---|
public function internalCreateAbsoluteUrl($params, $scheme = null, $composition = null)
{
$params = (array) $params;
$url = $this->internalCreateUrl($params, $composition);
if (strpos($url, '://') === false) {
$url = $this->getHostInfo() . $url;
}
if (is_string($scheme) && ($pos = strpos($url, '://')) !== false) {
$url = $scheme . substr($url, $pos);
}
return $url;
}
Yii2 createUrl base implementation extends the prepand of the comosition
public string internalCreateUrl ( $params, $composition = null ) | ||
$params | string|array |
An array with params or not (e.g. |
$composition | null|luya\web\Composition |
Composition instance to change the route behavior |
public function internalCreateUrl($params, $composition = null)
{
$params = (array) $params;
$composition = empty($composition) ? $this->getComposition() : $composition;
$originalParams = $params;
// prepand the original route, whether is hidden or not!
// https://github.com/luyadev/luya/issues/1146
$params[0] = $composition->prependTo($params[0], $composition->createRoute());
$response = parent::createUrl($params);
// Check if the parsed route with the prepand composition has been found or not.
if (strpos($response, rtrim($params[0], '/')) !== false) {
// we got back the same url from the createUrl, no match against composition route.
$response = parent::createUrl($originalParams);
}
$response = $this->removeBaseUrl($response);
$response = $composition->prependTo($response);
return $this->prependBaseUrl($response);
}
Defined in: yii\base\Component::off()
Detaches an existing event handler from this component.
This method is the opposite of on().
Note: in case wildcard pattern is passed for event name, only the handlers registered with this wildcard will be removed, while handlers registered with plain names matching this wildcard will remain.
See also on().
public boolean off ( $name, $handler = null ) | ||
$name | string |
Event name |
$handler | callable|null |
The event handler to be removed. If it is null, all handlers attached to the named event will be removed. |
return | boolean |
If a handler is found and detached |
---|
public function off($name, $handler = null)
{
$this->ensureBehaviors();
if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
return false;
}
if ($handler === null) {
unset($this->_events[$name], $this->_eventWildcards[$name]);
return true;
}
$removed = false;
// plain event names
if (isset($this->_events[$name])) {
foreach ($this->_events[$name] as $i => $event) {
if ($event[0] === $handler) {
unset($this->_events[$name][$i]);
$removed = true;
}
}
if ($removed) {
$this->_events[$name] = array_values($this->_events[$name]);
return true;
}
}
// wildcard event names
if (isset($this->_eventWildcards[$name])) {
foreach ($this->_eventWildcards[$name] as $i => $event) {
if ($event[0] === $handler) {
unset($this->_eventWildcards[$name][$i]);
$removed = true;
}
}
if ($removed) {
$this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
// remove empty wildcards to save future redundant regex checks:
if (empty($this->_eventWildcards[$name])) {
unset($this->_eventWildcards[$name]);
}
}
}
return $removed;
}
Defined in: yii\base\Component::on()
Attaches an event handler to an event.
The event handler must be a valid PHP callback. The following are some examples:
function ($event) { ... } // anonymous function
[$object, 'handleClick'] // $object->handleClick()
['Page', 'handleClick'] // Page::handleClick()
'handleClick' // global function handleClick()
The event handler must be defined with the following signature,
function ($event)
where $event
is an yii\base\Event object which includes parameters associated with the event.
Since 2.0.14 you can specify event name as a wildcard pattern:
$component->on('event.group.*', function ($event) {
Yii::trace($event->name . ' is triggered.');
});
See also off().
public void on ( $name, $handler, $data = null, $append = true ) | ||
$name | string |
The event name |
$handler | callable |
The event handler |
$data | mixed |
The data to be passed to the event handler when the event is triggered. When the event handler is invoked, this data can be accessed via yii\base\Event::$data. |
$append | boolean |
Whether to append new event handler to the end of the existing handler list. If false, the new handler will be inserted at the beginning of the existing handler list. |
public function on($name, $handler, $data = null, $append = true)
{
$this->ensureBehaviors();
if (strpos($name, '*') !== false) {
if ($append || empty($this->_eventWildcards[$name])) {
$this->_eventWildcards[$name][] = [$handler, $data];
} else {
array_unshift($this->_eventWildcards[$name], [$handler, $data]);
}
return;
}
if ($append || empty($this->_events[$name])) {
$this->_events[$name][] = [$handler, $data];
} else {
array_unshift($this->_events[$name], [$handler, $data]);
}
}
Extend functionality of parent::parseRequest() by verify and resolve the composition informations.
See also yii\web\UrlManager::parseRequest().
public array|boolean parseRequest ( $request ) | ||
$request | luya\web\Request |
The request component. |
return | array|boolean |
The route and the associated parameters. The latter is always empty
if $enablePrettyUrl is |
---|
public function parseRequest($request)
{
// extra data from request to composition, which changes the pathInfo of the Request-Object.
$resolver = $this->getComposition()->getResolvedPathInfo($request);
try {
$request->setPathInfo($resolver->resolvedPath);
} catch (NotFoundHttpException $error) {
// the resolver has thrown an 404 excpetion, stop parsing request and return false (which is: page not found)
return false;
}
$parsedRequest = parent::parseRequest($request);
// if [[enablePrettyUrl]] is `false`. `false` is returned if the current request cannot be successfully parsed.
if ($parsedRequest === false) {
return false;
}
// ensure if the parsed route first match equals the composition pattern.
// This can be the case when composition is hidden, but not default language is loaded and a
// url composition route is loaded!
// @see https://github.com/luyadev/luya/issues/1146
$res = $this->routeHasLanguageCompositionPrefix($parsedRequest[0], $resolver->getResolvedKeyValue(Composition::VAR_LANG_SHORT_CODE));
if ($this->overrideLanguage) {
// set the application language based from the parsed composition request:
Yii::$app->setLocale($this->composition->langShortCode);
Yii::$app->language = $this->composition->langShortCode;
}
// if enableStrictParsing is enabled and the route is not found, $parsedRequest will return `false`.
if ($res === false && ($this->composition->hidden || $parsedRequest === false)) {
return $parsedRequest;
}
$composition = $this->composition->createRoute();
$length = strlen($composition);
$route = $parsedRequest[0];
if (substr($route, 0, $length+1) == $composition.'/') {
$parsedRequest[0] = substr($parsedRequest[0], $length);
}
// remove start trailing slashes from route.
$parsedRequest[0] = ltrim($parsedRequest[0], '/');
return $parsedRequest;
}
Prepand the base url to an existing route
public string prependBaseUrl ( $route ) | ||
$route | string |
The route where the base url should be prepend to. |
return | string |
The route with prepanded baseUrl. |
---|
public function prependBaseUrl($route)
{
return rtrim($this->baseUrl, '/').'/'.ltrim($route, '/');
}
Remove the base url from a route
public mixed removeBaseUrl ( $route ) | ||
$route | string |
The route where the baseUrl should be removed from. |
public function removeBaseUrl($route)
{
return preg_replace('#'.preg_quote($this->baseUrl, '#').'#', '', $route, 1);
}
Ensure whether a route starts with a language short key or not.
public boolean routeHasLanguageCompositionPrefix ( $route, $language ) | ||
$route | string |
The route to check |
$language | string |
The language to check whether it exists or not |
public function routeHasLanguageCompositionPrefix($route, $language)
{
$parts = explode("/", $route);
if (isset($parts[0]) && $parts[0] == $language) {
return true;
}
return false;
}
Defined in: yii\web\UrlManager::setBaseUrl()
Sets the base URL that is used by createUrl() to prepend to created URLs.
This is mainly used when $enablePrettyUrl is true
and $showScriptName is false
.
public void setBaseUrl ( $value ) | ||
$value | string |
The base URL that is used by createUrl() to prepend to created URLs. |
public function setBaseUrl($value)
{
$this->_baseUrl = $value === null ? null : rtrim(Yii::getAlias($value), '/');
}
Defined in: yii\web\UrlManager::setBuiltRulesCache()
Stores $builtRules to cache, using $rulesDeclaration as a part of cache key.
protected boolean setBuiltRulesCache ( $ruleDeclarations, $builtRules ) | ||
$ruleDeclarations | array |
The rule declarations. Each array element represents a single rule declaration. Please refer to $rules for the acceptable rule formats. |
$builtRules | yii\web\UrlRuleInterface[] |
The rule objects built from the given rule declarations. |
return | boolean |
Whether the value is successfully stored into cache |
---|
protected function setBuiltRulesCache($ruleDeclarations, $builtRules)
{
$cache = $this->ensureCache();
if (!$cache) {
return false;
}
return $cache->set([$this->cacheKey, $this->ruleConfig, $ruleDeclarations], $builtRules);
}
Setter method for the composition component.
public void setComposition ( luya\web\Composition $composition ) | ||
$composition | luya\web\Composition |
public function setComposition(Composition $composition)
{
$this->_composition = $composition;
}
Defined in: yii\web\UrlManager::setHostInfo()
Sets the host info that is used by createAbsoluteUrl() to prepend to created URLs.
public void setHostInfo ( $value ) | ||
$value | string |
The host info (e.g. "https://www.example.com") that is used by createAbsoluteUrl() to prepend to created URLs. |
public function setHostInfo($value)
{
$this->_hostInfo = $value === null ? null : rtrim($value, '/');
}
Defined in: yii\web\UrlManager::setRuleToCache()
Store rule (e.g. yii\web\UrlRule) to internal cache.
protected void setRuleToCache ( $cacheKey, yii\web\UrlRuleInterface $rule ) | ||
$cacheKey | ||
$rule | yii\web\UrlRuleInterface |
protected function setRuleToCache($cacheKey, UrlRuleInterface $rule)
{
$this->_ruleCache[$cacheKey][] = $rule;
}
Defined in: yii\web\UrlManager::setScriptUrl()
Sets the entry script URL that is used by createUrl() to prepend to created URLs.
This is mainly used when $enablePrettyUrl is false
or $showScriptName is true
.
public void setScriptUrl ( $value ) | ||
$value | string |
The entry script URL that is used by createUrl() to prepend to created URLs. |
public function setScriptUrl($value)
{
$this->_scriptUrl = $value;
}
Defined in: yii\base\Component::trigger()
Triggers an event.
This method represents the happening of an event. It invokes all attached handlers for the event including class-level handlers.
public void trigger ( $name, yii\base\Event $event = null ) | ||
$name | string |
The event name |
$event | yii\base\Event|null |
The event instance. If not set, a default yii\base\Event object will be created. |
public function trigger($name, Event $event = null)
{
$this->ensureBehaviors();
$eventHandlers = [];
foreach ($this->_eventWildcards as $wildcard => $handlers) {
if (StringHelper::matchWildcard($wildcard, $name)) {
$eventHandlers[] = $handlers;
}
}
if (!empty($this->_events[$name])) {
$eventHandlers[] = $this->_events[$name];
}
if (!empty($eventHandlers)) {
$eventHandlers = call_user_func_array('array_merge', $eventHandlers);
if ($event === null) {
$event = new Event();
}
if ($event->sender === null) {
$event->sender = $this;
}
$event->handled = false;
$event->name = $name;
foreach ($eventHandlers as $handler) {
$event->data = $handler[1];
call_user_func($handler[0], $event);
// stop further handling if the event is handled
if ($event->handled) {
return;
}
}
}
// invoke class-level attached handlers
Event::trigger($this, $name, $event);
}