0 关注者

抽象类 yii\web\CompositeUrlRule

继承yii\web\CompositeUrlRule » yii\base\BaseObject
实现yii\base\Configurable, yii\web\UrlRuleInterface
子类yii\rest\UrlRule, yii\web\GroupUrlRule
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/web/CompositeUrlRule.php

CompositeUrlRule 是 URL 规则类的基类,它由多个简单的规则组成。

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$createStatus integer|null 最后一次调用 createUrl() 后的 URL 创建状态。 yii\web\CompositeUrlRule
$createUrlStatus integer|null 最后一次调用 createUrl() 后的 URL 创建状态。 yii\web\CompositeUrlRule
$rules yii\web\UrlRuleInterface[] 此组合规则中包含的 URL 规则。 yii\web\CompositeUrlRule

受保护的属性

隐藏继承的属性

属性 类型 描述 定义于

公共方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\BaseObject
__construct() 构造函数。 yii\base\BaseObject
__get() 返回对象属性的值。 yii\base\BaseObject
__isset() 检查属性是否已设置,即是否已定义且不为空。 yii\base\BaseObject
__set() 设置对象属性的值。 yii\base\BaseObject
__unset() 将对象属性设置为 null。 yii\base\BaseObject
canGetProperty() 返回一个值,指示是否可以读取属性。 yii\base\BaseObject
canSetProperty() 返回一个值,指示是否可以设置属性。 yii\base\BaseObject
className() 返回此类的完全限定名。 yii\base\BaseObject
createUrl() 根据给定的路由和参数创建 URL。 yii\web\CompositeUrlRule
getCreateUrlStatus() 返回最后一次调用 createUrl() 后的 URL 创建状态。 yii\web\CompositeUrlRule
hasMethod() 返回一个值,指示是否已定义方法。 yii\base\BaseObject
hasProperty() 返回一个值,指示是否已定义属性。 yii\base\BaseObject
init() 初始化对象。 yii\web\CompositeUrlRule
parseRequest() 解析给定的请求并返回相应的路由和参数。 yii\web\CompositeUrlRule

受保护的方法

隐藏继承的方法

方法 描述 定义于
createRules() 创建此组合规则中应包含的 URL 规则。 yii\web\CompositeUrlRule
iterateRules() 遍历指定的规则并为每个规则调用 createUrl() yii\web\CompositeUrlRule

属性详细信息

隐藏继承的属性

$createStatus 受保护属性 (可用版本 2.0.12)

最后一次调用 createUrl() 后的 URL 创建状态。

protected integer|null $createStatus null
$createUrlStatus 公共属性

最后一次调用 createUrl() 后的 URL 创建状态。null 如果规则没有提供有关创建状态的信息。

$rules 受保护属性

此组合规则中包含的 URL 规则。此属性在 init() 中由 createRules() 的返回值设置。

方法详细信息

隐藏继承的方法

__call() 公共方法

定义于: yii\base\BaseObject::__call()

调用不是类方法的命名方法。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当调用未知方法时会隐式调用它。

public mixed __call ( $name, $params )
$name string

方法名称

$params array

方法参数

return mixed

方法返回值

throws yii\base\UnknownMethodException

当调用未知方法时

                public function __call($name, $params)
{
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__construct() 公共方法

定义于: yii\base\BaseObject::__construct()

构造函数。

默认实现执行两件事

  • 使用给定的配置 $config 初始化对象。
  • 调用 init()

如果此方法在子类中被重写,建议

  • 构造函数的最后一个参数是一个配置数组,如这里的 $config
  • 在构造函数的末尾调用父类实现。
public void __construct ( $config = [] )
$config array

将用于初始化对象属性的名称-值对

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() 公共方法

定义于: yii\base\BaseObject::__get()

返回对象属性的值。

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 $value = $object->property; 时会隐式调用。

另请参阅 __set()

public mixed __get ( $name )
$name string

属性名称

return mixed

属性值

throws yii\base\UnknownPropertyException

如果属性未定义

throws yii\base\InvalidCallException

如果属性是只写属性

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter();
    } elseif (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);
}

            
__isset() 公共方法

定义于: yii\base\BaseObject::__isset()

检查属性是否已设置,即是否已定义且不为空。

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 isset($object->property) 时会隐式调用。

注意,如果属性未定义,将返回 false。

另请参阅 https://php.ac.cn/manual/en/function.isset.php

public boolean __isset ( $name )
$name string

属性名称或事件名称

return boolean

命名的属性是否已设置(不为 null)。

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    return false;
}

            
__set() 公共方法

定义于: yii\base\BaseObject::__set()

设置对象属性的值。

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 $object->property = $value; 时会隐式调用。

另请参阅 __get()

public void __set ( $name, $value )
$name string

属性名称或事件名称

$value mixed

属性值

throws yii\base\UnknownPropertyException

如果属性未定义

throws yii\base\InvalidCallException

如果属性是只读属性

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter($value);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    } else {
        throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
    }
}

            
__unset() 公共方法

定义于: yii\base\BaseObject::__unset()

将对象属性设置为 null。

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 unset($object->property) 时会隐式调用。

注意,如果属性未定义,此方法将不执行任何操作。如果属性是只读属性,它将抛出异常。

另请参阅 https://php.ac.cn/manual/en/function.unset.php

public void __unset ( $name )
$name string

属性名称

throws yii\base\InvalidCallException

如果属性是只读属性。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
    }
}

            
canGetProperty() 公共方法

定义于: yii\base\BaseObject::canGetProperty()

返回一个值,指示是否可以读取属性。

如果一个属性是可读的,则

  • 该类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);

另请参阅 canSetProperty()

public boolean canGetProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

return boolean

属性是否可以读取

                public function canGetProperty($name, $checkVars = true)
{
    return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}

            
canSetProperty() 公共方法

定义于: yii\base\BaseObject::canSetProperty()

返回一个值,指示是否可以设置属性。

如果一个属性是可写的,则

  • 该类具有与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);

另请参阅 canGetProperty()

public boolean canSetProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

return boolean

属性是否可以写入

                public function canSetProperty($name, $checkVars = true)
{
    return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}

            
className() 公共静态方法
自 2.0.14 版本起已弃用。在 PHP >=5.5 上,使用 ::class 替代。

定义于: yii\base\BaseObject::className()

返回此类的完全限定名。

public static string className ( )
return string

此类的完全限定名称。

                public static function className()
{
    return get_called_class();
}

            
createRules() 受保护抽象方法

创建此组合规则中应包含的 URL 规则。

protected abstract yii\web\UrlRuleInterface[] createRules ( )
return yii\web\UrlRuleInterface[]

URL 规则

                abstract protected function createRules();

            
createUrl() 公共方法

根据给定的路由和参数创建 URL。

public string|boolean createUrl ( $manager, $route, $params )
$manager yii\web\UrlManager

URL 管理器

$route string

路由。它不应该在开头或结尾有斜杠。

$params array

参数

return string|boolean

创建的 URL,如果此规则不能用于创建此 URL,则为 false。

                public function createUrl($manager, $route, $params)
{
    $this->createStatus = UrlRule::CREATE_STATUS_SUCCESS;
    $url = $this->iterateRules($this->rules, $manager, $route, $params);
    if ($url !== false) {
        return $url;
    }
    if ($this->createStatus === UrlRule::CREATE_STATUS_SUCCESS) {
        // create status was not changed - there is no rules configured
        $this->createStatus = UrlRule::CREATE_STATUS_PARSING_ONLY;
    }
    return false;
}

            
getCreateUrlStatus() 公共方法(自版本 2.0.12 起可用)

返回最后一次调用 createUrl() 后的 URL 创建状态。

对于多个规则,状态将通过按位或运算符组合(例如,UrlRule::CREATE_STATUS_PARSING_ONLY | UrlRule::CREATE_STATUS_PARAMS_MISMATCH)。

另请参阅

public integer|null getCreateUrlStatus ( )
return integer|null

最后一次调用 createUrl() 后的 URL 创建状态。null 如果规则没有提供有关创建状态的信息。

                public function getCreateUrlStatus()
{
    return $this->createStatus;
}

            
hasMethod() 公共方法

定义于: yii\base\BaseObject::hasMethod()

返回一个值,指示是否已定义方法。

默认实现调用 php 函数 method_exists()。当您实现 php 魔术方法 __call() 时,您可能需要重写此方法。

public boolean hasMethod ( $name )
$name string

方法名称

return boolean

方法是否已定义

                public function hasMethod($name)
{
    return method_exists($this, $name);
}

            
hasProperty() 公共方法

定义于: yii\base\BaseObject::hasProperty()

返回一个值,指示是否已定义属性。

如果属性被定义,则

  • 该类具有与指定名称相关联的 getter 或 setter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);

另请参阅

public boolean hasProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

return boolean

属性是否被定义

                public function hasProperty($name, $checkVars = true)
{
    return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}

            
init() 公共方法

初始化对象。

该方法在对象使用给定配置初始化后,在构造函数的末尾调用。

public void init ( )

                public function init()
{
    parent::init();
    $this->rules = $this->createRules();
}

            
iterateRules() 受保护的方法 (自版本 2.0.12 起可用)

遍历指定的规则并为每个规则调用 createUrl()

另请参见 createUrl().

protected boolean|string iterateRules ( $rules, $manager, $route, $params )
$rules yii\web\UrlRuleInterface[]

要迭代的规则。

$manager yii\web\UrlManager

URL 管理器

$route string

路由。它不应该在开头或结尾有斜杠。

$params array

参数

return boolean|string

生成的 URL,如果指定规则中的任何规则都不能用于生成此 URL,则为 false

                protected function iterateRules($rules, $manager, $route, $params)
{
    /* @var $rule UrlRule */
    foreach ($rules as $rule) {
        $url = $rule->createUrl($manager, $route, $params);
        if ($url !== false) {
            $this->createStatus = UrlRule::CREATE_STATUS_SUCCESS;
            return $url;
        }
        if (
            $this->createStatus === null
            || !method_exists($rule, 'getCreateUrlStatus')
            || $rule->getCreateUrlStatus() === null
        ) {
            $this->createStatus = null;
        } else {
            $this->createStatus |= $rule->getCreateUrlStatus();
        }
    }
    return false;
}

            
parseRequest() 公共方法

解析给定的请求并返回相应的路由和参数。

public array|boolean parseRequest ( $manager, $request )
$manager yii\web\UrlManager

URL 管理器

$request yii\web\Request

请求组件

return array|boolean

解析结果。路由和参数将作为数组返回。如果为 false,则表示此规则不能用于解析此路径信息。

                public function parseRequest($manager, $request)
{
    foreach ($this->rules as $rule) {
        /* @var $rule UrlRule */
        $result = $rule->parseRequest($manager, $request);
        if (YII_DEBUG) {
            Yii::debug([
                'rule' => method_exists($rule, '__toString') ? $rule->__toString() : get_class($rule),
                'match' => $result !== false,
                'parent' => self::className(),
            ], __METHOD__);
        }
        if ($result !== false) {
            return $result;
        }
    }
    return false;
}