Class luya\web\Composition
Inheritance | luya\web\Composition » yii\base\Component » yii\base\BaseObject |
---|---|
Implements | ArrayAccess, yii\base\Configurable |
Available since version | 1.0.0 |
Source Code | https://github.com/luyadev/luya/blob/master/core/web/Composition.php |
Composition parseRequest Handler.
The composition is run for every {{luya\web\UrlManager::parseRequest()}} call in order to determine the language of the application based on {{luya\web\Composition::$hostInfoMapping}} or from the given {{luya\web\Request::$hostInfo}}.
It also provides common functions in order to make complex regional language detection for urls
like https://example.com/fr/ch
, its possible to set {{luya\web\Composition::$pattern}} and retrieve
the value later inside your application. The langShortCode
must be provided as long as working with the
cms, as its bound to the administration language admin_lang
database table.
It also provides security check options:
- {{luya\web\Composition::$allowedHosts}}
The Composition component is registered by the {{luya\base\Boot}} object and is therefore accessible
trough Yii::$app->composition
as "singleton" instance.
Public Properties
Property | Type | Description | Defined By |
---|---|---|---|
$allowedHosts | array|string | An array with all valid hosts in order to ensure the request host is equals to valid hosts. | luya\web\Composition |
$behaviors | yii\base\Behavior[] | List of behaviors attached to this component. | yii\base\Component |
$default | array | Default value if there is no composition provided in the url. | luya\web\Composition |
$defaultLangShortCode | string | Return default defined language shord code | luya\web\Composition |
$expectedValues | array | An array where key is the pattern and value an array of possible values for this pattern. | luya\web\Composition |
$full | string | luya\web\Composition | |
$hideDefaultPrefixOnly | boolean | Disable composition prefixes in URLs only for default language. | luya\web\Composition |
$hostInfoMapping | array | Define the default behavior for differnet host info schemas, if the host info is not found the default behvaior via $default will be used. |
luya\web\Composition |
$keys | array | Return an array with key and value of all resolve composition values for the current request. | luya\web\Composition |
$langShortCode | string | Return wrapper of getKey('langShortCode') | luya\web\Composition |
$language | string|boolean | Get the language value from the langShortCode key, false if not set. | luya\web\Composition |
$pattern | string | Url matching prefix, which is used for all the modules (e.g. an e-store requireds a language as the cms needs this informations too). | luya\web\Composition |
$prefixPath | string | Return the current composition prefix path for the request based on request input and hidden option. | luya\web\Composition |
$request | yii\web\Request | Request-Object container from DI | luya\web\Composition |
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() | Class constructor, to get data from DiContainer. | luya\web\Composition |
__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 |
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 |
createRoute() | Create compositon route based on the provided keys (to override), if no keys provided all the default values will be used. | luya\web\Composition |
createRouteEnsure() | Create a route but ensures if composition is hidden anyhow. | luya\web\Composition |
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 |
get() | Return the whole composition array. | luya\web\Composition |
getBehavior() | Returns the named behavior object. | yii\base\Component |
getBehaviors() | Returns all behaviors attached to this component. | yii\base\Component |
getDefaultLangShortCode() | Return the the default langt short code. | luya\web\Composition |
getFull() | Return a path like string with all composition with trailing slash e.g. us/e. | luya\web\Composition |
getKey() | Get value from the composition array for the provided key, if the key does not existing the default value
will be return. The standard value of the defaultValue is false, so if nothing defined and the could not
be found, the return value is false . |
luya\web\Composition |
getKeys() | Resolves the current key and value objects based on the current pathInto and pattern from Request component. | luya\web\Composition |
getLangShortCode() | Wrapper for getKey('langShortCode') to load language to set php env settings. |
luya\web\Composition |
getLanguage() | Wrapper for getKey('langShortCode') to load language to set php env settings. |
luya\web\Composition |
getPrefixPath() | Get the composition prefix path based on current provided request. | luya\web\Composition |
getResolvedPathInfo() | Resolve the current url request and retun an array contain resolved route and the resolved values. | luya\web\Composition |
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 the object. | luya\web\Composition |
isHostAllowed() | Checks if the current request name against the allowedHosts list. | luya\web\Composition |
off() | Detaches an existing event handler from this component. | yii\base\Component |
offsetExists() | ArrayAccess offset exists. | luya\web\Composition |
offsetGet() | ArrayAccess get the value for a key. | luya\web\Composition |
offsetSet() | ArrayAccess set value to array. | luya\web\Composition |
offsetUnset() | ArrayAccess unset key. | luya\web\Composition |
on() | Attaches an event handler to an event. | yii\base\Component |
prependTo() | Prepend to current composition (or to provided composition prefix-route) to a given route. | luya\web\Composition |
removeFrom() | Remove the composition full parterns from a given route | luya\web\Composition |
resolveHostInfo() | Find the host for a given definition based on the {{Composition::$hostInfoMapping}} definition. | luya\web\Composition |
setKey() | Set a new composition key and value in composition array. If the key already exists, it will be overwritten. | luya\web\Composition |
trigger() | Triggers an event. | yii\base\Component |
Constants
Constant | Value | Description | Defined By |
---|---|---|---|
VAR_LANG_SHORT_CODE | 'langShortCode' | luya\web\Composition | |
VAR_MATCH_REGEX | '/<(\w+):?([^>]+)?>/' | luya\web\Composition |
Property Details
An array with all valid hosts in order to ensure the request host is equals to valid hosts. This filter provides protection against 'host header' attacks.
The allowed hosts check does not care about the protocol (https/http), there fore take a look the {{luya\traits\ApplicationTrait::$ensureSecureConnection}}.
'allowedHosts' => [
'example.com', // this does not include www.
'*.example.com', // this incluides www. and all other subdomains.
]
In order to allow all subdomains including www or not use
*example.com
.
If no value is defined, the allowed host filtering is disable, this is the default behavior.
Default value if there is no composition provided in the url. The default value must match the url.
Return default defined language shord code
An array where key is the pattern and value an array of possible values for this pattern. A list of values which are valid for every pattern. If set and a value is provided which is not inside this property an http not found exception is thrown.
Every value must be set for the given pattern name:
'expectedValues' => [
'langShortCode' => ['en', 'de'], // langShortCode pattern is required
'countryShortCode' => ['ch', 'fr', 'de', 'uk'], // additional patterns if configured
],
This configuration is usual only used in MVC applications without CMS module, as the cms module throws an exception if the requested language is not available.
Disable composition prefixes in URLs only for default language. Takes effect only when hidden
option is disabled.
Define the default behavior for differnet host info schemas, if the host info is not found
the default behvaior via $default
will be used.
An array where the key is the host info and value the array with the default configuration .e.g.
'hostInfoMapping' => [
'http://mydomain.com' => ['langShortCode' => 'en'],
'http://meinedomain.de' => ['langShortCode' => 'de'],
],
The above configuration must be defined in your compostion componeont configuration in your config file.
Return an array with key and value of all resolve composition values for the current request.
Return wrapper of getKey('langShortCode')
Get the language value from the langShortCode key, false if not set.
Url matching prefix, which is used for all the modules (e.g. an e-store requireds a language as the cms needs this informations too). After proccessing this informations, they will be removed from the url for further proccessing.
Examples of how to use patterns:
'pattern' => '<langShortCode:[a-z]{2}>/<countryShortCode:[a-z]{2}>', // de/ch; fr/ch
Return the current composition prefix path for the request based on request input and hidden option.
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;
}
Class constructor, to get data from DiContainer.
public void __construct ( luya\web\Request $request, array $config = [] ) | ||
$request | luya\web\Request |
Request componet resolved from Depency Manager |
$config | array |
The object configuration array |
public function __construct(Request $request, array $config = [])
{
$this->request = $request;
parent::__construct($config);
}
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);
}
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\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();
}
Create compositon route based on the provided keys (to override), if no keys provided all the default values will be used.
public string createRoute ( array $overrideKeys = [] ) | ||
$overrideKeys | array |
public function createRoute(array $overrideKeys = [])
{
$composition = $this->getKeys();
foreach ($overrideKeys as $key => $value) {
if (array_key_exists($key, $composition)) {
$composition[$key] = $value;
}
}
return implode('/', $composition);
}
Create a route but ensures if composition is hidden anyhow.
public string createRouteEnsure ( array $overrideKeys = [] ) | ||
$overrideKeys | array |
public function createRouteEnsure(array $overrideKeys = [])
{
if (isset($overrideKeys[self::VAR_LANG_SHORT_CODE])) {
$langShortCode = $overrideKeys[self::VAR_LANG_SHORT_CODE];
} else {
$langShortCode = $this->langShortCode;
}
return $this->hidden || (!$this->hidden && $langShortCode == $this->defaultLangShortCode && $this->hideDefaultPrefixOnly) ? '' : $this->createRoute($overrideKeys);
}
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);
}
}
}
getKeys()
instead, trigger in 2.0, will be removed in 3.0
Return the whole composition array.
public array get ( ) |
public function get()
{
trigger_error('use `getKeys()` instead. Will be removed in version 3.0', E_USER_DEPRECATED);
return $this->_keys;
}
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;
}
Return the the default langt short code.
public string getDefaultLangShortCode ( ) |
public function getDefaultLangShortCode()
{
return $this->default[self::VAR_LANG_SHORT_CODE];
}
getPrefixPath()
instead, trigger in 2.0, will be removed in 3.0
Return a path like string with all composition with trailing slash e.g. us/e.
public string getFull ( ) |
public function getFull()
{
trigger_error('use `getPrefixPath()` instead. Will be removed in version 3.0', E_USER_DEPRECATED);
return $this->createRouteEnsure();
}
Get value from the composition array for the provided key, if the key does not existing the default value
will be return. The standard value of the defaultValue is false, so if nothing defined and the could not
be found, the return value is false
.
public string|boolean getKey ( $key, $defaultValue = false ) | ||
$key | string |
The key to find in the composition array e.g. langShortCode |
$defaultValue | string |
The default value if they could not be found |
public function getKey($key, $defaultValue = false)
{
$this->getKeys();
return isset($this->_keys[$key]) ? $this->_keys[$key] : $defaultValue;
}
Resolves the current key and value objects based on the current pathInto and pattern from Request component.
public array getKeys ( ) | ||
return | array |
An array with key values like |
---|
public function getKeys()
{
if ($this->_keys === null) {
$this->_keys = $this->getResolvedPathInfo($this->request)->resolvedValues;
}
return $this->_keys;
}
Wrapper for getKey('langShortCode')
to load language to set php env settings.
public string|boolean getLangShortCode ( ) | ||
return | string|boolean |
Get the language value from the langShortCode key, false if not set. |
---|
public function getLangShortCode()
{
return $this->getKey(self::VAR_LANG_SHORT_CODE);
}
getLangShortCode()
instead, trigger in 2.0, will be removed in 3.0
Wrapper for getKey('langShortCode')
to load language to set php env settings.
public string|boolean getLanguage ( ) | ||
return | string|boolean |
Get the language value from the langShortCode key, false if not set. |
---|
public function getLanguage()
{
trigger_error('use `getLangShortCode()` instead. Will be removed in version 3.0', E_USER_DEPRECATED);
return $this->getKey(self::VAR_LANG_SHORT_CODE);
}
Get the composition prefix path based on current provided request.
An example response could be de
or with other composition keys and patterns de/ch
or de-CH
.
public string getPrefixPath ( ) | ||
return | string |
A prefix path like |
---|
public function getPrefixPath()
{
return $this->createRouteEnsure();
}
Resolve the current url request and retun an array contain resolved route and the resolved values.
public luya\web\CompositionResolver getResolvedPathInfo ( luya\web\Request $request ) | ||
$request | luya\web\Request |
public function getResolvedPathInfo(Request $request)
{
return new CompositionResolver($request, $this);
}
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);
}
Initializes the object.
This method is invoked at the end of the constructor after the object is initialized with the given configuration.
public void init ( ) |
public function init()
{
parent::init();
// check if the required key langShortCode exist in the default array.
if (!array_key_exists(self::VAR_LANG_SHORT_CODE, $this->default)) {
throw new Exception("The composition default rule must contain a langShortCode.");
}
if ($this->allowedHosts !== null && !$this->isHostAllowed($this->allowedHosts)) {
throw new ForbiddenHttpException("Invalid host name.");
}
if (array_key_exists($this->request->hostInfo, $this->hostInfoMapping)) {
$this->default = $this->hostInfoMapping[$this->request->hostInfo];
}
}
Checks if the current request name against the allowedHosts list.
public boolean isHostAllowed ( $allowedHosts ) | ||
$allowedHosts | ||
return | boolean |
Whether the current hostName is allowed or not. |
---|
public function isHostAllowed($allowedHosts)
{
$currentHost = $this->request->hostName;
$rules = (array) $allowedHosts;
foreach ($rules as $allowedHost) {
if (StringHelper::matchWildcard($allowedHost, $currentHost)) {
return true;
}
}
return false;
}
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;
}
ArrayAccess offset exists.
See also \ArrayAccess::offsetExists().
public boolean offsetExists ( $offset ) | ||
$offset |
#[\ReturnTypeWillChange]
public function offsetExists($offset)
{
return isset($this->_keys[$offset]);
}
ArrayAccess get the value for a key.
See also \ArrayAccess::offsetGet().
public mixed offsetGet ( $offset ) | ||
$offset | string |
The key to get from the array. |
return | mixed |
The value for the offset key from the array. |
---|
#[\ReturnTypeWillChange]
public function offsetGet($offset)
{
return $this->getKey($offset, null);
}
ArrayAccess set value to array.
See also \ArrayAccess::offsetSet().
public void offsetSet ( $offset, $value ) | ||
$offset | string |
The key of the array |
$value | mixed |
The value for the offset key. |
throws | luya\Exception |
---|
#[\ReturnTypeWillChange]
public function offsetSet($offset, $value)
{
$this->setKey($offset, $value);
}
ArrayAccess unset key.
Unsetting data via array access is not allowed.
See also \ArrayAccess::offsetUnset().
public void offsetUnset ( $offset ) | ||
$offset | string |
The key to unset from the array. |
throws | luya\Exception |
---|
#[\ReturnTypeWillChange]
public function offsetUnset($offset)
{
throw new Exception('Deleting keys in Composition is not allowed.');
}
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]);
}
}
Prepend to current composition (or to provided composition prefix-route) to a given route.
Assuming the current composition returns en/gb
and the route is foo/bar
the return
value would be en/gb/foo/bar
.
If a trailing slash is provided from a route, this will be returned as well, assuming:
echo prependTo('/foobar', 'en/gb'); // ouput: /en/gb/foobar
echo prependTo('foobar', 'en/gb'); // output: en/gb/foobar
public string prependTo ( $route, $prefix = null ) | ||
$route | string |
The route where the composition prefix should be prepended. |
$prefix | null|string |
Define the value you want to prepend to the route or not. |
public function prependTo($route, $prefix = null)
{
if ($prefix === null) {
$prefix = $this->getPrefixPath();
}
if (empty($prefix)) {
return $route;
}
$prepend = '';
// if it contains a prepend slash, we keep this, as long as the route is also longer then just a slash.
if (substr($route, 0, 1) == '/' && strlen($route) > 1) {
$prepend = '/';
}
return $prepend.$prefix.'/'.ltrim($route, '/');
}
Remove the composition full parterns from a given route
public string removeFrom ( $route ) | ||
$route | string | |
return | string |
Route cleanup from the compositon pattern (without). |
---|
public function removeFrom($route)
{
$pattern = preg_quote($this->prefixPath.'/', '#');
return preg_replace("#$pattern#", '', $route, 1);
}
Find the host for a given definition based on the {{Composition::$hostInfoMapping}} definition.
Find the host info mapping (if existing) for a lang short code:
$host = $composition->resolveHostInfo('en');
Or resolve by provide full host info mapping defintion:
$host = $composition->resolveHostInfo([
'langShortCode' => 'de'
'countryShortCode' => 'ch',
]);
Keep in mind that when {{Composition::$hostInfoMapping}} is empty (no defintion), false is returned.
public string|boolean resolveHostInfo ( $defintion ) | ||
$defintion | string|array |
The hostinfo mapping config containing an array with full defintion of different keys or a string which will only resolved based on langShortCode identifier. |
return | string|boolean |
Returns the host name from the host info maping otherwise false if not found. |
---|
public function resolveHostInfo($defintion)
{
// if its a scalar value, we assume the user wants to find host info based on languageShortCode
if (is_scalar($defintion)) {
$defintion = [self::VAR_LANG_SHORT_CODE => $defintion];
}
$results = $this->hostInfoMapping;
foreach ($defintion as $key => $value) {
$results = ArrayHelper::searchColumns($results, $key, $value);
}
return empty($results) ? false : key($results);
}
Set a new composition key and value in composition array. If the key already exists, it will be overwritten.
public void setKey ( $key, $value ) | ||
$key | string |
The key in the array, e.g. langShortCode |
$value | string |
The value coresponding to the key e.g. de |
public function setKey($key, $value)
{
$this->_keys[$key] = $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);
}