0 关注者

类 yii\web\GroupUrlRule

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

GroupUrlRule 表示一组 URL 规则,这些规则的模式和路由共享相同的开头前缀。

GroupUrlRule 最适合由模块使用,模块通常使用模块 ID 作为 URL 规则的前缀。例如,以下代码创建了一个 admin 模块的规则

new GroupUrlRule([
    'prefix' => 'admin',
    'rules' => [
        'login' => 'user/login',
        'logout' => 'user/logout',
        'dashboard' => 'default/dashboard',
    ],
]);

// the above rule is equivalent to the following three rules:

[
    'admin/login' => 'admin/user/login',
    'admin/logout' => 'admin/user/logout',
    'admin/dashboard' => 'admin/default/dashboard',
]

以上示例假设模式和路由的前缀相同。可以通过配置 $prefix$routePrefix 分别使其不同。

使用 GroupUrlRule 比直接声明其包含的单个规则更有效率。这是因为 GroupUrlRule 可以通过简单地检查前缀是否匹配来快速确定是否应该处理 URL 解析或创建请求。

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$createStatus integer|null 最后一次调用 createUrl() 后的 URL 创建状态。 yii\web\CompositeUrlRule
$createUrlStatus integer|null 最后一次调用 createUrl() 后的 URL 创建状态。 yii\web\CompositeUrlRule
$prefix string $rules 中声明的每个规则的模式部分的前缀。 yii\web\GroupUrlRule
$routePrefix string|null $rules 中声明的每个规则的路由部分的前缀。如果此属性未设置,则将采用 $prefix 的值。 yii\web\GroupUrlRule
$ruleConfig array URL 规则的默认配置。 yii\web\GroupUrlRule
$rules array 此复合规则中包含的规则。 yii\web\GroupUrlRule

受保护属性

隐藏继承的属性

属性 类型 描述 定义于

公共方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\BaseObject
__construct() 构造函数。 yii\base\BaseObject
__get() 返回对象属性的值。 yii\base\BaseObject
__isset() 检查属性是否已设置,即已定义且不为 null。 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\GroupUrlRule
getCreateUrlStatus() 返回最后一次调用 createUrl() 后的 URL 创建状态。 yii\web\CompositeUrlRule
hasMethod() 返回一个值,指示方法是否已定义。 yii\base\BaseObject
hasProperty() 返回一个值,指示属性是否已定义。 yii\base\BaseObject
init() 初始化对象。 yii\web\GroupUrlRule
parseRequest() 解析给定的请求并返回相应的路由和参数。 yii\web\GroupUrlRule

受保护方法

隐藏继承的方法

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

属性详情

隐藏继承的属性

$prefix 公共属性

$rules 中声明的每个规则的模式部分的前缀。前缀和模式将用斜杠分隔。

public string $prefix null
$routePrefix 公共属性

$rules 中声明的每个规则的路由部分的前缀。前缀和路由将用斜杠分隔。如果此属性未设置,则将采用 $prefix 的值。

public string|null $routePrefix null
$ruleConfig 公共属性

URL 规则的默认配置。通过 $rules 指定的单个规则配置在配置规则的相同属性时将优先。

public array $ruleConfig = [
    
'class' => 'yii\web\UrlRule',
]
$rules 公共属性

此复合规则中包含的规则。有关此属性的格式,请参阅 yii\web\UrlManager::$rules

另请参阅

public 数组 $rules = []

方法详情

隐藏继承的方法

__call() 公共方法

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

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

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

public 混合 __call ( $name, $params )
$name string

方法名

$params array

方法参数

返回值 混合

方法的返回值

抛出 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 混合 __get ( $name )
$name string

属性名

返回值 混合

属性值

抛出 yii\base\UnknownPropertyException

如果属性未定义

抛出 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()

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

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

请注意,如果属性未定义,则会返回 false。

另见 https://php.ac.cn/manual/en/function.isset.php

public 布尔值 __isset ( $name )
$name string

属性名或事件名

返回值 布尔值

命名的属性是否已设置(非空)。

                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 混合

属性值

抛出 yii\base\UnknownPropertyException

如果属性未定义

抛出 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

属性名

抛出 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 布尔值 canGetProperty ( $name, $checkVars true )
$name string

属性名

$checkVars 布尔值

是否将成员变量视为属性

返回值 布尔值

属性是否可读

                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 布尔值 canSetProperty ( $name, $checkVars true )
$name string

属性名

$checkVars 布尔值

是否将成员变量视为属性

返回值 布尔值

属性是否可写

                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 字符串 className ( )
返回值 string

此类的完全限定名称。

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

            
createRules() 受保护方法

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

protected yii\web\UrlRuleInterface[] createRules ( )
返回值 yii\web\UrlRuleInterface[]

URL 规则

                protected function createRules()
{
    $rules = [];
    foreach ($this->rules as $key => $rule) {
        if (!is_array($rule)) {
            $verbs = 'GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS';
            $verb = null;
            if (preg_match("/^((?:(?:$verbs),)*(?:$verbs))\\s+(.*)$/", $key, $matches)) {
                $verb = explode(',', $matches[1]);
                $key = $matches[2];
            }
            $rule = [
                'pattern' => ltrim($this->prefix . '/' . $key, '/'),
                'route' => ltrim($this->routePrefix . '/' . $rule, '/'),
                'verb' => $verb
            ];
        } elseif (isset($rule['pattern'], $rule['route'])) {
            $rule['pattern'] = ltrim($this->prefix . '/' . $rule['pattern'], '/');
            $rule['route'] = ltrim($this->routePrefix . '/' . $rule['route'], '/');
        }
        $rule = Yii::createObject(array_merge($this->ruleConfig, $rule));
        if (!$rule instanceof UrlRuleInterface) {
            throw new InvalidConfigException('URL rule class must implement UrlRuleInterface.');
        }
        $rules[] = $rule;
    }
    return $rules;
}

            
createUrl() 公共方法

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

public 字符串|布尔值 createUrl ( $manager, $route, $params )
$manager yii\web\UrlManager

URL 管理器

$route string

路由。开头和结尾不应该有斜杠。

$params array

参数

返回值 字符串|布尔值

生成的 URL,如果此规则无法用于创建此 URL,则返回 false。

                public function createUrl($manager, $route, $params)
{
    if ($this->routePrefix === '' || strpos($route, $this->routePrefix . '/') === 0) {
        return parent::createUrl($manager, $route, $params);
    }
    $this->createStatus = UrlRule::CREATE_STATUS_ROUTE_MISMATCH;
    return false;
}

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

定义于: yii\web\CompositeUrlRule::getCreateUrlStatus()

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

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

另请参阅

public 整数| getCreateUrlStatus ( )
返回值 integer|null

上次 createUrl() 调用后 URL 创建的状态。如果规则未提供有关创建状态的信息,则为 null

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

            
hasMethod() 公共方法

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

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

默认实现是对 php 函数 method_exists() 的调用。当您实现 php 魔术方法 __call() 时,您可以覆盖此方法。

public 布尔值 hasMethod ( $name )
$name string

方法名

返回值 布尔值

方法是否已定义

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

            
hasProperty() 公共方法

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

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

如果属性已定义,则

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

另请参阅

public 布尔值 hasProperty ( $name, $checkVars true )
$name string

属性名

$checkVars 布尔值

是否将成员变量视为属性

返回值 布尔值

属性是否已定义

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

            
init() 公共方法

初始化对象。

此方法在构造函数结束时调用,在对象使用给定配置初始化后调用。

public void init ( )

                public function init()
{
    $this->prefix = trim((string)$this->prefix, '/');
    $this->routePrefix = $this->routePrefix === null ? $this->prefix : trim($this->routePrefix, '/');
    parent::init();
}

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

定义于: yii\web\CompositeUrlRule::iterateRules()

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

另请参阅 createUrl()

protected 布尔值|字符串 iterateRules ( $rules, $manager, $route, $params )
$rules yii\web\UrlRuleInterface[]

要迭代的规则。

$manager yii\web\UrlManager

URL 管理器

$route string

路由。开头和结尾不应该有斜杠。

$params array

参数

返回值 布尔值|字符串

生成的 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 数组|布尔值 parseRequest ( $manager, $request )
$manager yii\web\UrlManager

URL 管理器

$request yii\web\Request

请求组件

返回值 数组|布尔值

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

                public function parseRequest($manager, $request)
{
    $pathInfo = $request->getPathInfo();
    if ($this->prefix === '' || strpos($pathInfo . '/', $this->prefix . '/') === 0) {
        return parent::parseRequest($manager, $request);
    }
    return false;
}