1 关注者

类 yii\i18n\Formatter

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

Formatter 提供了一组常用的数据格式化方法。

Formatter 提供的格式化方法都以 asXyz() 的形式命名。其中一些方法的行为可以通过 Formatter 的属性进行配置。例如,通过配置 $dateFormat,可以控制 asDate() 如何将值格式化为日期字符串。

Formatter 默认情况下在 yii\base\Application 中被配置为一个应用组件。可以通过 Yii::$app->formatter 访问该实例。

Formatter 类旨在根据 $locale 格式化值。要使此功能正常工作,必须安装 PHP intl 扩展。但是,大多数方法即使未安装 PHP intl 扩展也能提供备用实现。如果没有 intl,月份和日期名称仅为英文。请注意,即使安装了 intl 扩展,在 32 位系统上格式化大于等于 2038 年或小于等于 1901 年的日期和时间值将回退到 PHP 实现,因为 intl 在内部使用 32 位 UNIX 时间戳。在 64 位系统上,如果安装了 intl 扩展,则在所有情况下都使用 intl 格式化程序。

注意:Formatter 类旨在用于格式化要显示给不同语言和时区的用户的数值。如果需要以机器可读格式格式化日期或时间,请改用 PHP date() 函数。

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$baseUnits array 用作 $measureUnits 中最小单位的乘数的基本单位。 yii\i18n\Formatter
$behaviors yii\base\Behavior[] 附加到此组件的行为列表。 yii\base\Component
$booleanFormat array 格式化布尔值时要显示的文本。 yii\i18n\Formatter
$calendar IntlCalendar|integer|null 用于日期格式化的日历。 yii\i18n\Formatter
$currencyCode string|null 指示用于 asCurrency() 的默认货币的 3 个字母的 ISO 4217 货币代码。 yii\i18n\Formatter
$currencyDecimalSeparator string|null 格式化货币时显示为小数点的字符。 yii\i18n\Formatter
$dateFormat string 用于格式化 日期 的默认格式字符串。 yii\i18n\Formatter
$datetimeFormat string 用于格式化 日期和时间 的默认格式字符串。 yii\i18n\Formatter
$decimalSeparator string|null 格式化数字时显示为小数点的字符。 yii\i18n\Formatter
$defaultTimeZone string 如果输入值未明确包含时区,则假定的时区。 yii\i18n\Formatter
$language string|null 用于翻译内部消息的语言代码(例如 en-USen)。 yii\i18n\Formatter
$locale string|null 用于本地化日期和数字格式的区域设置 ID。 yii\i18n\Formatter
$measureUnits array 重量和长度计量单位的配置。 yii\i18n\Formatter
$nullDisplay string|null 格式化 null 值时要显示的文本。 yii\i18n\Formatter
$numberFormatterOptions array 传递给由 createNumberFormatter() 创建的所有数字格式化程序对象的 intl NumberFormatter::setAttribute() 方法的名称值对列表。 yii\i18n\Formatter
$numberFormatterSymbols array 传递给由 createNumberFormatter() 创建的所有数字格式化程序对象的 intl NumberFormatter::setSymbol() 方法的名称值对列表。 yii\i18n\Formatter
$numberFormatterTextOptions array 传递给由 createNumberFormatter() 创建的所有数字格式化程序对象的 intl NumberFormatter::setTextAttribute() 方法的名称值对列表。 yii\i18n\Formatter
$sizeFormatBase integer 计算千字节的基础(每千字节 1000 或 1024 字节),由 asSize()asShortSize() 使用。 yii\i18n\Formatter
$systemOfUnits string 默认的计量单位制。 yii\i18n\Formatter
$thousandSeparator string|null 格式化数字时显示为千位分隔符(也称为分组分隔符)的字符。 yii\i18n\Formatter
$timeFormat string 用于格式化 时间 的默认格式字符串。 yii\i18n\Formatter
$timeZone string|null 用于格式化时间和日期值的时区。 yii\i18n\Formatter

公共方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\Component
__clone() 此方法在通过克隆现有对象创建对象后被调用。 yii\base\Component
__construct() 构造函数。 yii\base\BaseObject
__get() 返回组件属性的值。 yii\base\Component
__isset() 检查属性是否已设置,即定义且不为 null。 yii\base\Component
__set() 设置组件属性的值。 yii\base\Component
__unset() 将组件属性设置为 null。 yii\base\Component
asBoolean() 将值格式化为布尔值。 yii\i18n\Formatter
asCurrency() 将值格式化为货币数字。 yii\i18n\Formatter
asDate() 将值格式化为日期。 yii\i18n\Formatter
asDatetime() 将值格式化为日期时间。 yii\i18n\Formatter
asDecimal() 将值格式化为十进制数字。 yii\i18n\Formatter
asDuration() 以人类可读的格式表示值作为持续时间。 yii\i18n\Formatter
asEmail() 将值格式化为邮件链接。 yii\i18n\Formatter
asHtml() 将值格式化为 HTML 文本。 yii\i18n\Formatter
asImage() 将值格式化为图像标签。 yii\i18n\Formatter
asInteger() 通过删除所有小数位而无需四舍五入将值格式化为整数。 yii\i18n\Formatter
asLength() 将值格式化为人类可读形式的长度,例如 12 米 yii\i18n\Formatter
asNtext() 将值格式化为 HTML 编码的纯文本,其中换行符转换为换行符。 yii\i18n\Formatter
asOrdinal() 将值格式化为数字的序数。 yii\i18n\Formatter
asParagraphs() 将值格式化为 HTML 编码的文本段落。 yii\i18n\Formatter
asPercent() 将值格式化为带“%”符号的百分比数字。 yii\i18n\Formatter
asRaw() 按原样格式化值,不进行任何格式化。 yii\i18n\Formatter
asRelativeTime() 将值格式化为日期与现在之间的时间间隔,以人类可读的形式。 yii\i18n\Formatter
asScientific() 将值格式化为科学记数法。 yii\i18n\Formatter
asShortLength() 将值格式化为人类可读形式的长度,例如 12 m yii\i18n\Formatter
asShortSize() 将以字节为单位的值格式化为人类可读形式的大小,例如 12 kB yii\i18n\Formatter
asShortWeight() 将值格式化为人类可读形式的重量,例如 12 kg yii\i18n\Formatter
asSize() 将以字节为单位的值格式化为人类可读形式的大小,例如 12 千字节 yii\i18n\Formatter
asSpellout() 将值格式化为数字拼写。 yii\i18n\Formatter
asText() 将值格式化为 HTML 编码的纯文本。 yii\i18n\Formatter
asTime() 将值格式化为时间。

yii\i18n\Formatter
asTimestamp() 将浮点数格式化为 Unix 时间戳(自 1970-01-01 以来的秒数),该浮点数表示日期、时间或日期时间。 yii\i18n\Formatter
asUrl() 将值格式化为超链接。 yii\i18n\Formatter
asWeight() 将值格式化为人类可读的重量形式,例如 12 kilograms yii\i18n\Formatter
attachBehavior() 将行为附加到此组件。 yii\base\Component
attachBehaviors() 将行为列表附加到组件。 yii\base\Component
behaviors() 返回此组件应具有的行为列表。 yii\base\Component
canGetProperty() 返回一个值,指示是否可以读取属性。 yii\base\Component
canSetProperty() 返回一个值,指示是否可以设置属性。 yii\base\Component
className() 返回此类的完全限定名称。 yii\base\BaseObject
detachBehavior() 从组件中分离行为。 yii\base\Component
detachBehaviors() 从组件中分离所有行为。 yii\base\Component
ensureBehaviors() 确保在 behaviors() 中声明的行为已附加到此组件。 yii\base\Component
format() 根据给定的格式类型格式化值。 yii\i18n\Formatter
getBehavior() 返回命名的行为对象。 yii\base\Component
getBehaviors() 返回附加到此组件的所有行为。 yii\base\Component
hasEventHandlers() 返回一个值,指示是否有任何处理程序附加到命名的事件。 yii\base\Component
hasMethod() 返回一个值,指示是否定义了方法。 yii\base\Component
hasProperty() 返回一个值,指示是否为此组件定义了属性。 yii\base\Component
init() 初始化对象。 yii\i18n\Formatter
off() 从此组件中分离现有的事件处理程序。 yii\base\Component
on() 将事件处理程序附加到事件。 yii\base\Component
trigger() 触发事件。 yii\base\Component

受保护的方法

隐藏继承的方法

方法 描述 定义于
asCurrencyStringFallback() 格式化值为货币数字的回退。 yii\i18n\Formatter
asDecimalStringFallback() 格式化值为十进制数字的回退。 yii\i18n\Formatter
asIntegerStringFallback() 格式化值为整数数字的回退,方法是删除所有小数位而无需舍入。 yii\i18n\Formatter
asPercentStringFallback() 格式化值为带“%”符号的百分比数字的回退。 yii\i18n\Formatter
createNumberFormatter() 根据给定的类型和格式创建数字格式化程序。 yii\i18n\Formatter
formatNumber() 给定以字节为单位的值,格式化人类可读形式的数字部分。 yii\i18n\Formatter
isNormalizedValueMispresented() 检查给定值及其规范化版本的字符串表示形式是否不同。 yii\i18n\Formatter
normalizeDatetimeValue() 将给定的日期时间值规范化为 DateTime 对象,该对象可被各种日期/时间格式化方法采用。 yii\i18n\Formatter
normalizeNumericStringValue() 规范化数字字符串值。 yii\i18n\Formatter
normalizeNumericValue() 规范化数字输入值。 yii\i18n\Formatter

常量

隐藏继承的常量

常量 描述 定义于
FORMAT_WIDTH_LONG 'long' yii\i18n\Formatter
FORMAT_WIDTH_SHORT 'short' yii\i18n\Formatter
UNIT_LENGTH 'length' yii\i18n\Formatter
UNIT_SYSTEM_IMPERIAL 'imperial' yii\i18n\Formatter
UNIT_SYSTEM_METRIC 'metric' yii\i18n\Formatter
UNIT_WEIGHT 'mass' yii\i18n\Formatter

属性详细信息

隐藏继承的属性

$baseUnits 公共属性(自版本 2.0.13 起可用)

用作 $measureUnits 中最小单位的乘数的基本单位。

public array $baseUnits = [
    
self::UNIT_LENGTH => [
        
self::UNIT_SYSTEM_IMPERIAL => 12,
        
self::UNIT_SYSTEM_METRIC => 1000,
    ],
    
self::UNIT_WEIGHT => [
        
self::UNIT_SYSTEM_IMPERIAL => 7000,
        
self::UNIT_SYSTEM_METRIC => 1000,
    ],
]
$booleanFormat 公共属性

格式化布尔值时要显示的文本。第一个元素对应于 false 显示的文本,第二个元素对应于 true 显示的文本。默认为 ['No', 'Yes'],其中 YesNo 将根据 $locale 进行翻译。

public array $booleanFormat null
$calendar 公共属性(自版本 2.0.7 起可用)

用于日期格式化的日历。此属性的值将直接传递给 IntlDateFormatter 类的构造函数

默认为 null,这意味着将使用公历。您也可以显式传递常量 \IntlDateFormatter::GREGORIAN 以表示公历。

要使用其他日历,例如 Jalali 日历,请将此属性设置为 \IntlDateFormatter::TRADITIONAL。然后必须在 $locale 中指定日历,例如,对于波斯日历,格式化程序的配置将为

'formatter' => [
    'locale' => 'fa_IR@calendar=persian',
    'calendar' => \IntlDateFormatter::TRADITIONAL,
],

可以在 ICU 手册 中找到可用的日历名称。

从 PHP 5.5 开始,您还可以使用 IntlCalendar 类的实例。有关更多详细信息,请查看 PHP 手册

如果 PHP intl 扩展 不可用,则设置此属性将不起作用。

另请参阅

$currencyCode 公共属性

用于 asCurrency() 的默认货币的 3 个字母的 ISO 4217 货币代码。如果未设置,则将使用与 $locale 对应的货币代码。请注意,在这种情况下,必须使用国家/地区代码指定 $locale,例如 en-US,否则无法确定默认货币。

public string|null $currencyCode null
$currencyDecimalSeparator 公共属性(自版本 2.0.35 起可用)

格式化货币时显示为小数点的字符。如果未设置,则将使用与 $locale 对应的货币小数点分隔符。如果 PHP intl 扩展 不可用,则设置此属性将不起作用。

$dateFormat 公共属性

用于格式化 日期 的默认格式字符串。这可以是“short”、“medium”、“long”或“full”,它们表示不同长度的预设格式。

它也可以是 ICU 手册 中指定的自定义格式。或者,这可以是以前缀 php: 开头的字符串,表示 PHP date() 函数可以识别的格式。

例如

'MM/dd/yyyy' // date in ICU format
'php:m/d/Y' // the same date in PHP format
public 字符串 $dateFormat 'medium'
$datetimeFormat 公共属性

用于格式化日期和时间的默认格式字符串。可以是“short”、“medium”、“long”或“full”,分别表示不同长度的预设格式。

它也可以是ICU 手册中指定的自定义格式。

或者,它可以是一个以 php: 为前缀的字符串,表示 PHP date() 函数可以识别的格式。

例如

'MM/dd/yyyy HH:mm:ss' // date and time in ICU format
'php:m/d/Y H:i:s' // the same date and time in PHP format
public 字符串 $datetimeFormat 'medium'
$decimalSeparator 公共属性

格式化数字时显示为小数点的字符。如果未设置,将使用与$locale对应的十进制分隔符。如果PHP intl 扩展不可用,则默认值为“.”。

$defaultTimeZone 公共属性 (自版本 2.0.1 起可用)

如果输入值未明确包含时区,则假定的时区。

该值必须是有效的时区标识符,例如 UTCEurope/BerlinAmerica/Chicago。请参阅php 手册以获取可用的时区。

它默认为 UTC,因此只有当您在数据库中以其他时区存储日期时间值时,才需要调整此值。

请注意,根据定义,UNIX 时间戳始终以 UTC 表示。这意味着指定与 UTC 不同的默认时区不会对作为 UNIX 时间戳给出的日期值产生影响。

public 字符串 $defaultTimeZone 'UTC'
$language 公共属性 (自版本 2.0.28 起可用)

用于翻译内部消息的语言代码(例如 en-USen)。如果未设置,则将使用$locale(如果包含,则不包含 @calendar 参数)。

public 字符串|null $language null
$locale 公共属性

用于本地化日期和数字格式的区域设置 ID。对于数字和日期格式,只有在安装了PHP intl 扩展时才有效。如果未设置,将使用yii\base\Application::$language

public 字符串|null $locale null
$measureUnits 公共属性 (自版本 2.0.13 起可用)

重量和长度计量单位的配置。此数组包含最常用的计量单位,但如果您有一些特殊要求,可以更改它。

例如,您可以添加较小的计量单位

$this->measureUnits[self::UNIT_LENGTH][self::UNIT_SYSTEM_METRIC] = [
    'nanometer' => 0.000001
]

另请参阅

public 数组 $measureUnits = [
    
self::UNIT_LENGTH => [
        
self::UNIT_SYSTEM_IMPERIAL => [
            
'inch' => 1,
            
'foot' => 12,
            
'yard' => 36,
            
'chain' => 792,
            
'furlong' => 7920,
            
'mile' => 63360,
        ],
        
self::UNIT_SYSTEM_METRIC => [
            
'millimeter' => 1,
            
'centimeter' => 10,
            
'meter' => 1000,
            
'kilometer' => 1000000,
        ],
    ],
    
self::UNIT_WEIGHT => [
        
self::UNIT_SYSTEM_IMPERIAL => [
            
'grain' => 1,
            
'drachm' => 27.34375,
            
'ounce' => 437.5,
            
'pound' => 7000,
            
'stone' => 98000,
            
'quarter' => 196000,
            
'hundredweight' => 784000,
            
'ton' => 15680000,
        ],
        
self::UNIT_SYSTEM_METRIC => [
            
'gram' => 1,
            
'kilogram' => 1000,
            
'ton' => 1000000,
        ],
    ],
]

$nullDisplay 公共属性

格式化null值时显示的文本。默认为'<span class="not-set">(not set)</span>',其中(not set)将根据$locale进行翻译。

public string|null $nullDisplay null
$numberFormatterOptions 公共属性

传递给由createNumberFormatter()创建的所有数字格式化程序对象的intl NumberFormatter::setAttribute()方法的一系列名称-值对。此属性仅在安装了PHP intl扩展时才有效。

有关可能的选项,请参阅PHP手册

例如,要调整小数位数的最大值和最小值,您可以像下面这样配置此属性

[
    NumberFormatter::MIN_FRACTION_DIGITS => 0,
    NumberFormatter::MAX_FRACTION_DIGITS => 2,
]
$numberFormatterSymbols 公共属性 (自版本 2.0.4 起可用)

传递给由createNumberFormatter()创建的所有数字格式化程序对象的intl NumberFormatter::setSymbol()方法的一系列名称-值对。此属性仅在安装了PHP intl扩展时才有效。

有关可能的选项,请参阅PHP手册

例如,要选择自定义货币符号,例如U+20BD而不是俄罗斯卢布的руб.

[
    NumberFormatter::CURRENCY_SYMBOL => '₽',
]
$numberFormatterTextOptions 公共属性

传递给由createNumberFormatter()创建的所有数字格式化程序对象的intl NumberFormatter::setTextAttribute()方法的一系列名称-值对。此属性仅在安装了PHP intl扩展时才有效。

有关可能的选项,请参阅PHP手册

例如,要更改负数的减号,您可以像下面这样配置此属性

[
    NumberFormatter::NEGATIVE_PREFIX => 'MINUS',
]
$sizeFormatBase 公共属性

计算千字节的基础(每千字节 1000 或 1024 字节),由asSize()asShortSize()使用。默认为 1024。

public integer $sizeFormatBase 1024
$systemOfUnits 公共属性 (自版本 2.0.13 起可用)

默认的计量单位系统。默认为UNIT_SYSTEM_METRIC。可能的值

另请参阅

public string $systemOfUnits self::UNIT_SYSTEM_METRIC
$thousandSeparator 公共属性

格式化数字时显示为千位分隔符(也称为分组分隔符)的字符。如果未设置,则将使用与$locale相对应的千位分隔符。如果PHP intl扩展不可用,则默认值为','。

$timeFormat 公共属性

用于格式化时间的默认格式字符串。这可以是“short”、“medium”、“long”或“full”,分别表示不同长度的预设格式。

它也可以是 ICU 手册 中指定的自定义格式。或者,这可以是以前缀 php: 开头的字符串,表示 PHP date() 函数可以识别的格式。

例如

'HH:mm:ss' // time in ICU format
'php:H:i:s' // the same time in PHP format
public string $timeFormat 'medium'
$timeZone 公共属性

用于格式化时间和日期值的时区。

这可以是任何可以传递给date_default_timezone_set()的值,例如UTCEurope/BerlinAmerica/Chicago。有关可用的时区,请参阅php手册。如果未设置此属性,则将使用yii\base\Application::$timeZone

请注意,如果输入日期值中不包含时区,则默认情况下输入数据的默认时区假定为UTC。如果在数据库中以不同的时区存储数据,则必须相应地调整$defaultTimeZone

public string|null $timeZone null

方法详情

隐藏继承的方法

__call() 公共方法

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

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

此方法将检查任何附加的行为是否具有指定的方法,如果可用,则将执行它。

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

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

方法名称

$params array

方法参数

返回值 mixed

方法返回值

抛出 yii\base\UnknownMethodException

调用未知方法时

                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()");
}

            
__clone() 公共方法

定义于: yii\base\Component::__clone()

此方法在通过克隆现有对象创建对象后被调用。

它会移除所有行为,因为它们附加到旧对象上。

public void __clone ( )

                public function __clone()
{
    $this->_events = [];
    $this->_eventWildcards = [];
    $this->_behaviors = null;
}

            
__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\Component::__get()

返回组件属性的值。

此方法将按以下顺序检查并相应地执行

  • 由 getter 定义的属性:返回 getter 的结果
  • 行为的属性:返回行为属性的值

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

另见 __set()

public mixed __get ( $name )
$name string

属性名称

返回值 mixed

属性值或行为属性的值

抛出 yii\base\UnknownPropertyException

如果未定义属性

抛出 yii\base\InvalidCallException

如果属性为只写。

                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);
}

            
__isset() 公共方法

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

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

此方法将按以下顺序检查并相应地执行

  • 由 setter 定义的属性:返回属性是否已设置
  • 行为的属性:返回属性是否已设置
  • 对于不存在的属性,返回 false

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

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

public boolean __isset ( $name )
$name string

属性名称或事件名称

返回值 boolean

命名的属性是否已设置

                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;
}

            
__set() 公共方法

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

设置组件属性的值。

此方法将按以下顺序检查并相应地执行

  • 由 setter 定义的属性:设置属性值
  • 格式为“on xyz”的事件:将处理程序附加到事件“xyz”
  • 格式为“as xyz”的行为:附加名为“xyz”的行为
  • 行为的属性:设置行为属性的值

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

另见 __get()

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

属性名称或事件名称

$value mixed

属性值

抛出 yii\base\UnknownPropertyException

如果未定义属性

抛出 yii\base\InvalidCallException

如果属性为只读。

                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);
}

            
__unset() 公共方法

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

将组件属性设置为 null。

此方法将按以下顺序检查并相应地执行

  • 由 setter 定义的属性:将属性值设置为 null
  • 行为的属性:将属性值设置为 null

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 unset($component->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);
        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);
}

            
asBoolean() 公共方法

将值格式化为布尔值。

另见 $booleanFormat

public string asBoolean ( $value )
$value mixed

要格式化的值。

返回值 string

格式化后的结果。

                public function asBoolean($value)
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    return $value ? $this->booleanFormat[1] : $this->booleanFormat[0];
}

            
asCurrency() 公共方法

将值格式化为货币数字。

此函数不需要安装 PHP intl 扩展 即可工作,但强烈建议安装它以获得良好的格式化结果。

从 2.0.16 版本开始,在标准化后错误表示的数字将使用回退函数作为字符串格式化,而无需 PHP intl 扩展支持。对于非常大的数字,建议将其作为字符串传递,不要使用科学计数法,否则输出可能错误。

public string asCurrency ( $value, $currency null, $options = [], $textOptions = [] )
$value mixed

要格式化的值。

$currency string|null

指示要使用的货币的 3 个字母的 ISO 4217 货币代码。如果为 null,则将使用 $currencyCode

$options array

数字格式化程序的可选配置。此参数将与 $numberFormatterOptions 合并。

$textOptions array

数字格式化程序的可选配置。此参数将与 $numberFormatterTextOptions 合并。

返回值 string

格式化后的结果。

抛出 yii\base\InvalidArgumentException

如果输入值不是数字或格式化失败。

抛出 yii\base\InvalidConfigException

如果没有给出货币并且 $currencyCode 未定义。

                public function asCurrency($value, $currency = null, $options = [], $textOptions = [])
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    $normalizedValue = $this->normalizeNumericValue($value);
    if ($this->isNormalizedValueMispresented($value, $normalizedValue)) {
        return $this->asCurrencyStringFallback((string) $value, $currency);
    }
    if ($this->_intlLoaded) {
        $currency = $currency ?: $this->currencyCode;
        // currency code must be set before fraction digits
        // https://php.ac.cn/manual/en/numberformatter.formatcurrency.php#114376
        if ($currency && !isset($textOptions[NumberFormatter::CURRENCY_CODE])) {
            $textOptions[NumberFormatter::CURRENCY_CODE] = $currency;
        }
        $formatter = $this->createNumberFormatter(NumberFormatter::CURRENCY, null, $options, $textOptions);
        if ($currency === null) {
            $result = $formatter->format($normalizedValue);
        } else {
            $result = $formatter->formatCurrency($normalizedValue, $currency);
        }
        if ($result === false) {
            throw new InvalidArgumentException('Formatting currency value failed: ' . $formatter->getErrorCode() . ' ' . $formatter->getErrorMessage());
        }
        return $result;
    }
    if ($currency === null) {
        if ($this->currencyCode === null) {
            throw new InvalidConfigException('The default currency code for the formatter is not defined and the php intl extension is not installed which could take the default currency from the locale.');
        }
        $currency = $this->currencyCode;
    }
    return $currency . ' ' . $this->asDecimal($normalizedValue, 2, $options, $textOptions);
}

            
asCurrencyStringFallback() 受保护方法 (自版本 2.0.16 起可用)

格式化值为货币数字的回退。

protected string asCurrencyStringFallback ( $value, $currency null )
$value string|integer|float

要格式化的值。

$currency string|null

指示要使用的货币的 3 个字母的 ISO 4217 货币代码。如果为 null,则将使用 $currencyCode

返回值 string

格式化后的结果。

抛出 yii\base\InvalidConfigException

如果没有给出货币并且 $currencyCode 未定义。

                protected function asCurrencyStringFallback($value, $currency = null)
{
    if ($currency === null) {
        if ($this->currencyCode === null) {
            throw new InvalidConfigException('The default currency code for the formatter is not defined.');
        }
        $currency = $this->currencyCode;
    }
    return $currency . ' ' . $this->asDecimalStringFallback($value, 2);
}

            
asDate() 公共方法

将值格式化为日期。

另请参阅 $dateFormat

public string asDate ( $value, $format null )
$value integer|string|DateTime|DateTimeInterface|null

要格式化的值。支持以下类型的值

  • 表示 Unix 时间戳的整数。根据定义,Unix 时间戳始终为 UTC。
  • 可以 解析以创建 DateTime 对象 的字符串。除非显式给出时区,否则假定时间戳位于 $defaultTimeZone 中。
  • PHP DateTime 对象。您可以设置 DateTime 对象的时区以指定源时区。

格式化程序将在格式化日期值之前根据 $timeZone 转换日期值。如果不需要执行时区转换,则需要将 $defaultTimeZone$timeZone 设置为相同的值。此外,不会对没有时间信息的值执行转换,例如 "2017-06-05"

$format string|null

用于将值转换为日期字符串的格式。如果为 null,则将使用 $dateFormat

这可以是“short”、“medium”、“long”或“full”,它们表示不同长度的预设格式。它也可以是 ICU 手册 中指定的自定义格式。

或者,这可以是一个以 php: 为前缀的字符串,表示 PHP date() 函数可以识别的格式。

返回值 string

格式化后的结果。

抛出 yii\base\InvalidArgumentException

如果输入值不能评估为日期值。

抛出 yii\base\InvalidConfigException

如果日期格式无效。

                public function asDate($value, $format = null)
{
    if ($format === null) {
        $format = $this->dateFormat;
    }
    return $this->formatDateTimeValue($value, $format, 'date');
}

            
asDatetime() 公共方法

将值格式化为日期时间。

另请参阅 $datetimeFormat

public string asDatetime ( $value, $format null )
$value integer|string|DateTime|DateTimeInterface|null

要格式化的值。支持以下类型的值

  • 表示 Unix 时间戳的整数。根据定义,Unix 时间戳始终为 UTC。
  • 可以 解析以创建 DateTime 对象 的字符串。除非显式给出时区,否则假定时间戳位于 $defaultTimeZone 中。
  • PHP DateTime 对象。您可以设置 DateTime 对象的时区以指定源时区。

格式化程序将在格式化日期值之前根据 $timeZone 转换日期值。如果不需要执行时区转换,则需要将 $defaultTimeZone$timeZone 设置为相同的值。

$format string|null

用于将值转换为日期字符串的格式。如果为 null,则将使用 $datetimeFormat

这可以是“short”、“medium”、“long”或“full”,它们表示不同长度的预设格式。它也可以是 ICU 手册 中指定的自定义格式。

或者,这可以是一个以 php: 为前缀的字符串,表示 PHP date() 函数可以识别的格式。

返回值 string

格式化后的结果。

抛出 yii\base\InvalidArgumentException

如果输入值不能评估为日期值。

抛出 yii\base\InvalidConfigException

如果日期格式无效。

                public function asDatetime($value, $format = null)
{
    if ($format === null) {
        $format = $this->datetimeFormat;
    }
    return $this->formatDateTimeValue($value, $format, 'datetime');
}

            
asDecimal() 公共方法

将值格式化为十进制数字。

属性 $decimalSeparator 将用于表示小数点。该值会自动四舍五入到定义的小数位数。

从 2.0.16 开始,在标准化后错误表示的数字将使用回退函数作为字符串格式化,而无需 PHP intl 扩展 支持。对于非常大的数字,建议将其作为字符串传递,不要使用科学记数法,否则输出可能不正确。

另请参阅

public string asDecimal ( $value, $decimals null, $options = [], $textOptions = [] )
$value mixed

要格式化的值。

$decimals integer|null

小数点后的位数。如果未给出,则位数取决于输入值,并根据 NumberFormatter::MIN_FRACTION_DIGITSNumberFormatter::MAX_FRACTION_DIGITS 确定,可以使用 $numberFormatterOptions 配置。如果 PHP intl 扩展不可用,则默认值为 2。如果希望在 intl 可用和不可用的环境之间保持一致的行为,则应在此处显式指定一个值。

$options array

数字格式化程序的可选配置。此参数将与 $numberFormatterOptions 合并。

$textOptions array

数字格式化程序的可选配置。此参数将与 $numberFormatterTextOptions 合并。

返回值 string

格式化后的结果。

抛出 yii\base\InvalidArgumentException

如果输入值不是数字或格式化失败。

                public function asDecimal($value, $decimals = null, $options = [], $textOptions = [])
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    $normalizedValue = $this->normalizeNumericValue($value);
    if ($this->isNormalizedValueMispresented($value, $normalizedValue)) {
        return $this->asDecimalStringFallback((string) $value, $decimals);
    }
    if ($this->_intlLoaded) {
        $f = $this->createNumberFormatter(NumberFormatter::DECIMAL, $decimals, $options, $textOptions);
        if (($result = $f->format($normalizedValue)) === false) {
            throw new InvalidArgumentException('Formatting decimal value failed: ' . $f->getErrorCode() . ' ' . $f->getErrorMessage());
        }
        return $result;
    }
    if ($decimals === null) {
        $decimals = 2;
    }
    return number_format($normalizedValue, $decimals, $this->decimalSeparator, $this->thousandSeparator);
}

            
asDecimalStringFallback() 受保护的方法 (自版本 2.0.16 起可用)

格式化值为十进制数字的回退。

属性 $decimalSeparator 将用于表示小数点。该值会自动四舍五入到定义的小数位数。

另请参阅

protected string asDecimalStringFallback ( $value, $decimals 2 )
$value string|integer|float

要格式化的值。

$decimals integer|null

小数点后的位数。默认值为 2

返回值 string

格式化后的结果。

                protected function asDecimalStringFallback($value, $decimals = 2)
{
    if (empty($value)) {
        $value = 0;
    }
    $value = $this->normalizeNumericStringValue((string) $value);
    $separatorPosition = strrpos($value, '.');
    if ($separatorPosition !== false) {
        $integerPart = substr($value, 0, $separatorPosition);
        $fractionalPart = substr($value, $separatorPosition + 1);
    } else {
        $integerPart = $value;
        $fractionalPart = null;
    }
    $decimalOutput = '';
    if ($decimals === null) {
        $decimals = 2;
    }
    $carry = 0;
    if ($decimals > 0) {
        $decimalSeparator = $this->decimalSeparator;
        if ($this->decimalSeparator === null) {
            $decimalSeparator = '.';
        }
        if ($fractionalPart === null) {
            $fractionalPart = str_repeat('0', $decimals);
        } elseif (strlen($fractionalPart) > $decimals) {
            $cursor = $decimals;
            // checking if fractional part must be rounded
            if ((int) substr($fractionalPart, $cursor, 1) >= 5) {
                while (--$cursor >= 0) {
                    $carry = 0;
                    $oneUp = (int) substr($fractionalPart, $cursor, 1) + 1;
                    if ($oneUp === 10) {
                        $oneUp = 0;
                        $carry = 1;
                    }
                    $fractionalPart = substr($fractionalPart, 0, $cursor) . $oneUp . substr($fractionalPart, $cursor + 1);
                    if ($carry === 0) {
                        break;
                    }
                }
            }
            $fractionalPart = substr($fractionalPart, 0, $decimals);
        } elseif (strlen($fractionalPart) < $decimals) {
            $fractionalPart = str_pad($fractionalPart, $decimals, '0');
        }
        $decimalOutput .= $decimalSeparator . $fractionalPart;
    }
    // checking if integer part must be rounded
    if ($carry || ($decimals === 0 && $fractionalPart !== null && (int) substr($fractionalPart, 0, 1) >= 5)) {
        $integerPartLength = strlen($integerPart);
        $cursor = 0;
        while (++$cursor <= $integerPartLength) {
            $carry = 0;
            $oneUp = (int) substr($integerPart, -$cursor, 1) + 1;
            if ($oneUp === 10) {
                $oneUp = 0;
                $carry = 1;
            }
            $integerPart = substr($integerPart, 0, -$cursor) . $oneUp . substr($integerPart, $integerPartLength - $cursor + 1);
            if ($carry === 0) {
                break;
            }
        }
        if ($carry === 1) {
            $integerPart = '1' . $integerPart;
        }
    }
    if (strlen($integerPart) > 3) {
        $thousandSeparator = $this->thousandSeparator;
        if ($thousandSeparator === null) {
            $thousandSeparator = ',';
        }
        $integerPart = strrev(implode(',', str_split(strrev($integerPart), 3)));
        if ($thousandSeparator !== ',') {
            $integerPart = str_replace(',', $thousandSeparator, $integerPart);
        }
    }
    return $integerPart . $decimalOutput;
}

            
asDuration() 公共方法 (自版本 2.0.7 起可用)

以人类可读的格式表示值作为持续时间。

public string asDuration ( $value, $implodeString ', ', $negativeSign '-' )
$value DateInterval|string|integer|null

要格式化的值。可接受的格式

  • DateInterval 对象
  • 整数 - 秒数。例如:值 131 表示 2 分钟 11 秒
  • ISO8601 持续时间格式。例如,所有这些值都表示 1 天 2 小时 30 分钟 的持续时间:2015-01-01T13:00:00Z/2015-01-02T13:30:00Z - 两个日期时间值之间 2015-01-01T13:00:00Z/P1D2H30M - 日期时间值之后的时间间隔 P1D2H30M/2015-01-02T13:30:00Z - 日期时间值之前的时间间隔 P1D2H30M - 只是一个日期间隔 P-1D2H30M - 一个负日期间隔 (-1 天 2 小时 30 分钟)
$implodeString string

将用于连接持续时间部分。默认为 ,

$negativeSign string

当持续时间为负时,将在其前面加上。默认为 -

返回值 string

格式化的持续时间。

                public function asDuration($value, $implodeString = ', ', $negativeSign = '-')
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    if ($value instanceof DateInterval) {
        $isNegative = $value->invert;
        $interval = $value;
    } elseif (is_numeric($value)) {
        $isNegative = $value < 0;
        $zeroDateTime = (new DateTime())->setTimestamp(0);
        $valueDateTime = (new DateTime())->setTimestamp(abs($value));
        $interval = $valueDateTime->diff($zeroDateTime);
    } elseif (strncmp($value, 'P-', 2) === 0) {
        $interval = new DateInterval('P' . substr($value, 2));
        $isNegative = true;
    } else {
        $interval = new DateInterval($value);
        $isNegative = $interval->invert;
    }
    $parts = [];
    if ($interval->y > 0) {
        $parts[] = Yii::t('yii', '{delta, plural, =1{1 year} other{# years}}', ['delta' => $interval->y], $this->language);
    }
    if ($interval->m > 0) {
        $parts[] = Yii::t('yii', '{delta, plural, =1{1 month} other{# months}}', ['delta' => $interval->m], $this->language);
    }
    if ($interval->d > 0) {
        $parts[] = Yii::t('yii', '{delta, plural, =1{1 day} other{# days}}', ['delta' => $interval->d], $this->language);
    }
    if ($interval->h > 0) {
        $parts[] = Yii::t('yii', '{delta, plural, =1{1 hour} other{# hours}}', ['delta' => $interval->h], $this->language);
    }
    if ($interval->i > 0) {
        $parts[] = Yii::t('yii', '{delta, plural, =1{1 minute} other{# minutes}}', ['delta' => $interval->i], $this->language);
    }
    if ($interval->s > 0) {
        $parts[] = Yii::t('yii', '{delta, plural, =1{1 second} other{# seconds}}', ['delta' => $interval->s], $this->language);
    }
    if ($interval->s === 0 && empty($parts)) {
        $parts[] = Yii::t('yii', '{delta, plural, =1{1 second} other{# seconds}}', ['delta' => $interval->s], $this->language);
        $isNegative = false;
    }
    return empty($parts) ? $this->nullDisplay : (($isNegative ? $negativeSign : '') . implode($implodeString, $parts));
}

            
asEmail() 公共方法

将值格式化为邮件链接。

public string asEmail ( $value, $options = [] )
$value string|null

要格式化的值。

$options array

以名称-值对表示的标签选项。参见 yii\helpers\Html::mailto()

返回值 string

格式化后的结果。

                public function asEmail($value, $options = [])
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    return Html::mailto(Html::encode($value), $value, $options);
}

            
asHtml() 公共方法

将值格式化为 HTML 文本。

该值将使用 yii\helpers\HtmlPurifier 进行净化,以避免 XSS 攻击。如果您不希望对值进行任何净化,请使用 asRaw()

public string asHtml ( $value, $config null )
$value string|null

要格式化的值。

$config array|null

HTMLPurifier 类的配置。

返回值 string

格式化后的结果。

                public function asHtml($value, $config = null)
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    return HtmlPurifier::process($value, $config);
}

            
asImage() 公共方法

将值格式化为图像标签。

public string asImage ( $value, $options = [] )
$value mixed

要格式化的值。

$options array

以名称-值对表示的标签选项。参见 yii\helpers\Html::img()

返回值 string

格式化后的结果。

                public function asImage($value, $options = [])
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    return Html::img($value, $options);
}

            
asInteger() 公共方法

通过删除所有小数位而无需四舍五入将值格式化为整数。

从 2.0.16 开始,在标准化后错误表示的数字将使用回退函数作为字符串格式化,而无需 PHP intl 扩展 支持。对于非常大的数字,建议将其作为字符串传递,不要使用科学记数法,否则输出可能不正确。

public string asInteger ( $value, $options = [], $textOptions = [] )
$value mixed

要格式化的值。

$options array

数字格式化程序的可选配置。此参数将与 $numberFormatterOptions 合并。

$textOptions array

数字格式化程序的可选配置。此参数将与 $numberFormatterTextOptions 合并。

返回值 string

格式化后的结果。

抛出 yii\base\InvalidArgumentException

如果输入值不是数字或格式化失败。

                public function asInteger($value, $options = [], $textOptions = [])
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    $normalizedValue = $this->normalizeNumericValue($value);
    if ($this->isNormalizedValueMispresented($value, $normalizedValue)) {
        return $this->asIntegerStringFallback((string) $value);
    }
    if ($this->_intlLoaded) {
        $f = $this->createNumberFormatter(NumberFormatter::DECIMAL, null, $options, $textOptions);
        $f->setAttribute(NumberFormatter::FRACTION_DIGITS, 0);
        if (($result = $f->format($normalizedValue, NumberFormatter::TYPE_INT64)) === false) {
            throw new InvalidArgumentException('Formatting integer value failed: ' . $f->getErrorCode() . ' ' . $f->getErrorMessage());
        }
        return $result;
    }
    return number_format((int) $normalizedValue, 0, $this->decimalSeparator, $this->thousandSeparator);
}

            
asIntegerStringFallback() 受保护方法 (自版本 2.0.16 起可用)

格式化值为整数数字的回退,方法是删除所有小数位而无需舍入。

protected string asIntegerStringFallback ( $value )
$value string|integer|float

要格式化的值。

返回值 string

格式化后的结果。

                protected function asIntegerStringFallback($value)
{
    if (empty($value)) {
        $value = 0;
    }
    $value = $this->normalizeNumericStringValue((string) $value);
    $separatorPosition = strrpos($value, '.');
    if ($separatorPosition !== false) {
        $integerPart = substr($value, 0, $separatorPosition);
    } else {
        $integerPart = $value;
    }
    return $this->asDecimalStringFallback($integerPart, 0);
}

            
asLength() 公共方法 (自版本 2.0.13 起可用)

将值格式化为人类可读形式的长度,例如 12 米

如果您需要更改值的单位作为最小单位的倍数,请检查属性 $baseUnits,并使用 $systemOfUnitsUNIT_SYSTEM_METRICUNIT_SYSTEM_IMPERIAL 之间切换。

另请参阅 asLength()

public string asLength ( $value, $decimals null, $numberOptions = [], $textOptions = [] )
$value float|integer

要格式化的值。

$decimals integer|null

小数点后的位数。

$numberOptions array

数字格式化程序的可选配置。此参数将与 $numberFormatterOptions 合并。

$textOptions array

数字格式化程序的可选配置。此参数将与 $numberFormatterTextOptions 合并。

返回值 string

格式化后的结果。

抛出 yii\base\InvalidArgumentException

如果输入值不是数字或格式化失败。

抛出 yii\base\InvalidConfigException

当未安装 INTL 或不包含所需信息时。

                public function asLength($value, $decimals = null, $numberOptions = [], $textOptions = [])
{
    return $this->formatUnit(self::UNIT_LENGTH, self::FORMAT_WIDTH_LONG, $value, $decimals, $numberOptions, $textOptions);
}

            
asNtext() 公共方法

将值格式化为 HTML 编码的纯文本,其中换行符转换为换行符。

public string asNtext ( $value )
$value string|null

要格式化的值。

返回值 string

格式化后的结果。

                public function asNtext($value)
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    return nl2br(Html::encode($value));
}

            
asOrdinal() 公共方法

将值格式化为数字的序数。

此函数需要安装 PHP intl 扩展

此格式化程序在处理非常大的数字时效果不佳。

public string asOrdinal ( $value )
$value mixed

要格式化的值

返回值 string

格式化后的结果。

抛出 yii\base\InvalidArgumentException

如果输入值不是数字或格式化失败。

抛出 yii\base\InvalidConfigException

PHP intl 扩展 不可用时。

                public function asOrdinal($value)
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    $value = $this->normalizeNumericValue($value);
    if ($this->_intlLoaded) {
        $f = $this->createNumberFormatter(NumberFormatter::ORDINAL);
        if (($result = $f->format($value)) === false) {
            throw new InvalidArgumentException('Formatting number as ordinal failed: ' . $f->getErrorCode() . ' ' . $f->getErrorMessage());
        }
        return $result;
    }
    throw new InvalidConfigException('Format as Ordinal is only supported when PHP intl extension is installed.');
}

            
asParagraphs() 公共方法

将值格式化为 HTML 编码的文本段落。

每个文本段落都包含在一个 <p> 标签中。一个或多个连续的空行分隔两个段落。

public string asParagraphs ( $value )
$value string|null

要格式化的值。

返回值 string

格式化后的结果。

                public function asParagraphs($value)
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    return str_replace('<p></p>', '', '<p>' . preg_replace('/\R{2,}/u', "</p>\n<p>", Html::encode($value)) . '</p>');
}

            
asPercent() 公共方法

将值格式化为带“%”符号的百分比数字。

从 2.0.16 开始,在标准化后错误表示的数字将使用回退函数作为字符串格式化,而无需 PHP intl 扩展 支持。对于非常大的数字,建议将其作为字符串传递,不要使用科学记数法,否则输出可能不正确。

public string asPercent ( $value, $decimals null, $options = [], $textOptions = [] )
$value mixed

要格式化的值。它必须是一个因子,例如 0.75 将导致 75%

$decimals integer|null

小数点后的位数。如果未给出,则位数取决于输入值,并根据 NumberFormatter::MIN_FRACTION_DIGITSNumberFormatter::MAX_FRACTION_DIGITS 确定,可以使用 $numberFormatterOptions 进行配置。如果 PHP intl 扩展不可用,则默认值为 0。如果您希望在 intl 可用和不可用的环境之间保持一致的行为,则应在此处明确指定一个值。

$options array

数字格式化程序的可选配置。此参数将与 $numberFormatterOptions 合并。

$textOptions array

数字格式化程序的可选配置。此参数将与 $numberFormatterTextOptions 合并。

返回值 string

格式化后的结果。

抛出 yii\base\InvalidArgumentException

如果输入值不是数字或格式化失败。

                public function asPercent($value, $decimals = null, $options = [], $textOptions = [])
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    $normalizedValue = $this->normalizeNumericValue($value);
    if ($this->isNormalizedValueMispresented($value, $normalizedValue)) {
        return $this->asPercentStringFallback((string) $value, $decimals);
    }
    if ($this->_intlLoaded) {
        $f = $this->createNumberFormatter(NumberFormatter::PERCENT, $decimals, $options, $textOptions);
        if (($result = $f->format($normalizedValue)) === false) {
            throw new InvalidArgumentException('Formatting percent value failed: ' . $f->getErrorCode() . ' ' . $f->getErrorMessage());
        }
        return $result;
    }
    if ($decimals === null) {
        $decimals = 0;
    }
    $normalizedValue *= 100;
    return number_format($normalizedValue, $decimals, $this->decimalSeparator, $this->thousandSeparator) . '%';
}

            
asPercentStringFallback() 受保护方法 (自版本 2.0.16 起可用)

格式化值为带“%”符号的百分比数字的回退。

属性 $decimalSeparator 将用于表示小数点。该值会自动四舍五入到定义的小数位数。

protected string asPercentStringFallback ( $value, $decimals null )
$value string|integer|float

要格式化的值。

$decimals integer|null

小数点后的位数。默认值为 0

返回值 string

格式化后的结果。

                protected function asPercentStringFallback($value, $decimals = null)
{
    if (empty($value)) {
        $value = 0;
    }
    if ($decimals === null) {
        $decimals = 0;
    }
    $value = $this->normalizeNumericStringValue((string) $value);
    $separatorPosition = strrpos($value, '.');
    if ($separatorPosition !== false) {
        $integerPart = substr($value, 0, $separatorPosition);
        $fractionalPart = str_pad(substr($value, $separatorPosition + 1), 2, '0');
        $integerPart .= substr($fractionalPart, 0, 2);
        $fractionalPart = substr($fractionalPart, 2);
        if ($fractionalPart === '') {
            $multipliedValue = $integerPart;
        } else {
            $multipliedValue = $integerPart . '.' . $fractionalPart;
        }
    } else {
        $multipliedValue = $value . '00';
    }
    return $this->asDecimalStringFallback($multipliedValue, $decimals) . '%';
}

            
asRaw() 公共方法

按原样格式化值,不进行任何格式化。

此方法仅返回参数,没有任何格式。唯一的例外是 null 值,它将使用 $nullDisplay 进行格式化。

public string asRaw ( $value )
$value mixed

要格式化的值。

返回值 string

格式化后的结果。

                public function asRaw($value)
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    return $value;
}

            
asRelativeTime() 公共方法

将值格式化为日期与现在之间的时间间隔,以人类可读的形式。

此方法可以用三种不同的方式使用

  1. 使用相对于 now 的时间戳。
  2. 使用相对于 $referenceTime 的时间戳。
  3. 使用 DateInterval 对象。
public string asRelativeTime ( $value, $referenceTime null )
$value integer|string|DateTime|DateTimeInterface|DateInterval|null

要格式化的值。支持以下类型的值

$referenceTime integer|string|DateTime|DateTimeInterface|null

如果指定,则当 $value 不是 DateInterval 对象时,该值用作参考时间而不是 now

返回值 string

格式化后的结果。

抛出 yii\base\InvalidArgumentException

如果输入值不能评估为日期值。

                public function asRelativeTime($value, $referenceTime = null)
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    if ($value instanceof DateInterval) {
        $interval = $value;
    } else {
        $timestamp = $this->normalizeDatetimeValue($value);
        $timeZone = new DateTimeZone($this->timeZone);
        if ($referenceTime === null) {
            $dateNow = new DateTime('now', $timeZone);
        } else {
            $dateNow = $this->normalizeDatetimeValue($referenceTime);
            $dateNow->setTimezone($timeZone);
        }
        $dateThen = $timestamp->setTimezone($timeZone);
        $interval = $dateThen->diff($dateNow);
    }
    if ($interval->invert) {
        if ($interval->y >= 1) {
            return Yii::t('yii', 'in {delta, plural, =1{a year} other{# years}}', ['delta' => $interval->y], $this->language);
        }
        if ($interval->m >= 1) {
            return Yii::t('yii', 'in {delta, plural, =1{a month} other{# months}}', ['delta' => $interval->m], $this->language);
        }
        if ($interval->d >= 1) {
            return Yii::t('yii', 'in {delta, plural, =1{a day} other{# days}}', ['delta' => $interval->d], $this->language);
        }
        if ($interval->h >= 1) {
            return Yii::t('yii', 'in {delta, plural, =1{an hour} other{# hours}}', ['delta' => $interval->h], $this->language);
        }
        if ($interval->i >= 1) {
            return Yii::t('yii', 'in {delta, plural, =1{a minute} other{# minutes}}', ['delta' => $interval->i], $this->language);
        }
        if ($interval->s == 0) {
            return Yii::t('yii', 'just now', [], $this->language);
        }
        return Yii::t('yii', 'in {delta, plural, =1{a second} other{# seconds}}', ['delta' => $interval->s], $this->language);
    }
    if ($interval->y >= 1) {
        return Yii::t('yii', '{delta, plural, =1{a year} other{# years}} ago', ['delta' => $interval->y], $this->language);
    }
    if ($interval->m >= 1) {
        return Yii::t('yii', '{delta, plural, =1{a month} other{# months}} ago', ['delta' => $interval->m], $this->language);
    }
    if ($interval->d >= 1) {
        return Yii::t('yii', '{delta, plural, =1{a day} other{# days}} ago', ['delta' => $interval->d], $this->language);
    }
    if ($interval->h >= 1) {
        return Yii::t('yii', '{delta, plural, =1{an hour} other{# hours}} ago', ['delta' => $interval->h], $this->language);
    }
    if ($interval->i >= 1) {
        return Yii::t('yii', '{delta, plural, =1{a minute} other{# minutes}} ago', ['delta' => $interval->i], $this->language);
    }
    if ($interval->s == 0) {
        return Yii::t('yii', 'just now', [], $this->language);
    }
    return Yii::t('yii', '{delta, plural, =1{a second} other{# seconds}} ago', ['delta' => $interval->s], $this->language);
}

            
asScientific() 公共方法

将值格式化为科学记数法。

public string asScientific ( $value, $decimals null, $options = [], $textOptions = [] )
$value mixed

要格式化的值。

$decimals integer|null

小数点后数字的位数。如果未指定,则数字位数取决于输入值,并根据NumberFormatter::MIN_FRACTION_DIGITSNumberFormatter::MAX_FRACTION_DIGITS确定,这两个参数可以通过$numberFormatterOptions配置。如果PHP intl扩展不可用,则默认值取决于PHP配置。如果希望在intl可用和不可用的环境之间保持一致的行为,则应在此处显式指定一个值。

$options array

数字格式化程序的可选配置。此参数将与 $numberFormatterOptions 合并。

$textOptions array

数字格式化程序的可选配置。此参数将与 $numberFormatterTextOptions 合并。

返回值 string

格式化后的结果。

抛出 yii\base\InvalidArgumentException

如果输入值不是数字或格式化失败。

                public function asScientific($value, $decimals = null, $options = [], $textOptions = [])
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    $value = $this->normalizeNumericValue($value);
    if ($this->_intlLoaded) {
        $f = $this->createNumberFormatter(NumberFormatter::SCIENTIFIC, $decimals, $options, $textOptions);
        if (($result = $f->format($value)) === false) {
            throw new InvalidArgumentException('Formatting scientific number value failed: ' . $f->getErrorCode() . ' ' . $f->getErrorMessage());
        }
        return $result;
    }
    if ($decimals !== null) {
        return sprintf("%.{$decimals}E", $value);
    }
    return sprintf('%.E', $value);
}

            
asShortLength() 公共方法 (自版本 2.0.13 起可用)

将值格式化为人类可读形式的长度,例如 12 m

这是asLength()的简写形式。

如果您需要更改值的单位作为最小单位的倍数,请检查属性 $baseUnits,并使用 $systemOfUnitsUNIT_SYSTEM_METRICUNIT_SYSTEM_IMPERIAL 之间切换。

另请参阅 asLength()

public string asShortLength ( $value, $decimals null, $options = [], $textOptions = [] )
$value float|integer

要格式化的值。

$decimals integer|null

小数点后的位数。

$options array

数字格式化程序的可选配置。此参数将与 $numberFormatterOptions 合并。

$textOptions array

数字格式化程序的可选配置。此参数将与 $numberFormatterTextOptions 合并。

返回值 string

格式化后的结果。

抛出 yii\base\InvalidArgumentException

如果输入值不是数字或格式化失败。

抛出 yii\base\InvalidConfigException

当未安装 INTL 或不包含所需信息时。

                public function asShortLength($value, $decimals = null, $options = [], $textOptions = [])
{
    return $this->formatUnit(self::UNIT_LENGTH, self::FORMAT_WIDTH_SHORT, $value, $decimals, $options, $textOptions);
}

            
asShortSize() 公共方法

将以字节为单位的值格式化为人类可读形式的大小,例如 12 kB

这是asSize()的简写形式。

如果$sizeFormatBase为1024,则在格式化结果中使用二进制前缀(例如 kibibyte/KiB、mebibyte/MiB 等)。

另请参阅

public string asShortSize ( $value, $decimals null, $options = [], $textOptions = [] )
$value string|integer|float|null

要格式化的字节数。

$decimals integer|null

小数点后的位数。

$options array

数字格式化程序的可选配置。此参数将与 $numberFormatterOptions 合并。

$textOptions array

数字格式化程序的可选配置。此参数将与 $numberFormatterTextOptions 合并。

返回值 string

格式化后的结果。

抛出 yii\base\InvalidArgumentException

如果输入值不是数字或格式化失败。

                public function asShortSize($value, $decimals = null, $options = [], $textOptions = [])
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    list($params, $position) = $this->formatNumber($value, $decimals, 4, $this->sizeFormatBase, $options, $textOptions);
    if ($this->sizeFormatBase == 1024) {
        switch ($position) {
            case 0:
                return Yii::t('yii', '{nFormatted} B', $params, $this->language);
            case 1:
                return Yii::t('yii', '{nFormatted} KiB', $params, $this->language);
            case 2:
                return Yii::t('yii', '{nFormatted} MiB', $params, $this->language);
            case 3:
                return Yii::t('yii', '{nFormatted} GiB', $params, $this->language);
            case 4:
                return Yii::t('yii', '{nFormatted} TiB', $params, $this->language);
            default:
                return Yii::t('yii', '{nFormatted} PiB', $params, $this->language);
        }
    } else {
        switch ($position) {
            case 0:
                return Yii::t('yii', '{nFormatted} B', $params, $this->language);
            case 1:
                return Yii::t('yii', '{nFormatted} kB', $params, $this->language);
            case 2:
                return Yii::t('yii', '{nFormatted} MB', $params, $this->language);
            case 3:
                return Yii::t('yii', '{nFormatted} GB', $params, $this->language);
            case 4:
                return Yii::t('yii', '{nFormatted} TB', $params, $this->language);
            default:
                return Yii::t('yii', '{nFormatted} PB', $params, $this->language);
        }
    }
}

            
asShortWeight() 公共方法 (自版本 2.0.13 起可用)

将值格式化为人类可读形式的重量,例如 12 kg

这是asWeight()的简写形式。

如果您需要更改值的单位作为最小单位的倍数,请检查属性 $baseUnits,并使用 $systemOfUnitsUNIT_SYSTEM_METRICUNIT_SYSTEM_IMPERIAL 之间切换。

public string asShortWeight ( $value, $decimals null, $options = [], $textOptions = [] )
$value float|integer

要格式化的值。

$decimals integer|null

小数点后的位数。

$options array

数字格式化程序的可选配置。此参数将与 $numberFormatterOptions 合并。

$textOptions array

数字格式化程序的可选配置。此参数将与 $numberFormatterTextOptions 合并。

返回值 string

格式化后的结果。

抛出 yii\base\InvalidArgumentException

如果输入值不是数字或格式化失败。

抛出 yii\base\InvalidConfigException

当未安装 INTL 或不包含所需信息时。

                public function asShortWeight($value, $decimals = null, $options = [], $textOptions = [])
{
    return $this->formatUnit(self::UNIT_WEIGHT, self::FORMAT_WIDTH_SHORT, $value, $decimals, $options, $textOptions);
}

            
asSize() 公共方法

将以字节为单位的值格式化为人类可读形式的大小,例如 12 千字节

如果$sizeFormatBase为1024,则在格式化结果中使用二进制前缀(例如 kibibyte/KiB、mebibyte/MiB 等)。

另请参阅

public string asSize ( $value, $decimals null, $options = [], $textOptions = [] )
$value string|integer|float|null

要格式化的字节数。

$decimals integer|null

小数点后的位数。

$options array

数字格式化程序的可选配置。此参数将与 $numberFormatterOptions 合并。

$textOptions array

数字格式化程序的可选配置。此参数将与 $numberFormatterTextOptions 合并。

返回值 string

格式化后的结果。

抛出 yii\base\InvalidArgumentException

如果输入值不是数字或格式化失败。

                public function asSize($value, $decimals = null, $options = [], $textOptions = [])
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    list($params, $position) = $this->formatNumber($value, $decimals, 4, $this->sizeFormatBase, $options, $textOptions);
    if ($this->sizeFormatBase == 1024) {
        switch ($position) {
            case 0:
                return Yii::t('yii', '{nFormatted} {n, plural, =1{byte} other{bytes}}', $params, $this->language);
            case 1:
                return Yii::t('yii', '{nFormatted} {n, plural, =1{kibibyte} other{kibibytes}}', $params, $this->language);
            case 2:
                return Yii::t('yii', '{nFormatted} {n, plural, =1{mebibyte} other{mebibytes}}', $params, $this->language);
            case 3:
                return Yii::t('yii', '{nFormatted} {n, plural, =1{gibibyte} other{gibibytes}}', $params, $this->language);
            case 4:
                return Yii::t('yii', '{nFormatted} {n, plural, =1{tebibyte} other{tebibytes}}', $params, $this->language);
            default:
                return Yii::t('yii', '{nFormatted} {n, plural, =1{pebibyte} other{pebibytes}}', $params, $this->language);
        }
    } else {
        switch ($position) {
            case 0:
                return Yii::t('yii', '{nFormatted} {n, plural, =1{byte} other{bytes}}', $params, $this->language);
            case 1:
                return Yii::t('yii', '{nFormatted} {n, plural, =1{kilobyte} other{kilobytes}}', $params, $this->language);
            case 2:
                return Yii::t('yii', '{nFormatted} {n, plural, =1{megabyte} other{megabytes}}', $params, $this->language);
            case 3:
                return Yii::t('yii', '{nFormatted} {n, plural, =1{gigabyte} other{gigabytes}}', $params, $this->language);
            case 4:
                return Yii::t('yii', '{nFormatted} {n, plural, =1{terabyte} other{terabytes}}', $params, $this->language);
            default:
                return Yii::t('yii', '{nFormatted} {n, plural, =1{petabyte} other{petabytes}}', $params, $this->language);
        }
    }
}

            
asSpellout() 公共方法

将值格式化为数字拼写。

此函数需要安装 PHP intl 扩展

此格式化程序在处理非常大的数字时效果不佳。

public string asSpellout ( $value )
$value mixed

要格式化的值

返回值 string

格式化后的结果。

抛出 yii\base\InvalidArgumentException

如果输入值不是数字或格式化失败。

抛出 yii\base\InvalidConfigException

PHP intl 扩展 不可用时。

                public function asSpellout($value)
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    $value = $this->normalizeNumericValue($value);
    if ($this->_intlLoaded) {
        $f = $this->createNumberFormatter(NumberFormatter::SPELLOUT);
        if (($result = $f->format($value)) === false) {
            throw new InvalidArgumentException('Formatting number as spellout failed: ' . $f->getErrorCode() . ' ' . $f->getErrorMessage());
        }
        return $result;
    }
    throw new InvalidConfigException('Format as Spellout is only supported when PHP intl extension is installed.');
}

            
asText() 公共方法

将值格式化为 HTML 编码的纯文本。

public string asText ( $value )
$value string|null

要格式化的值。

返回值 string

格式化后的结果。

                public function asText($value)
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    return Html::encode($value);
}

            
asTime() 公共方法

将值格式化为时间。

另请参阅$timeFormat

public string asTime ( $value, $format null )
$value integer|string|DateTime|DateTimeInterface|null

要格式化的值。支持以下类型的值

  • 表示 Unix 时间戳的整数。根据定义,Unix 时间戳始终为 UTC。
  • 可以 解析以创建 DateTime 对象 的字符串。除非显式给出时区,否则假定时间戳位于 $defaultTimeZone 中。
  • PHP DateTime 对象。您可以设置 DateTime 对象的时区以指定源时区。

格式化程序将在格式化日期值之前根据 $timeZone 转换日期值。如果不需要执行时区转换,则需要将 $defaultTimeZone$timeZone 设置为相同的值。

$format string|null

用于将值转换为日期字符串的格式。如果为null,则将使用$timeFormat

这可以是“short”、“medium”、“long”或“full”,它们表示不同长度的预设格式。它也可以是 ICU 手册 中指定的自定义格式。

或者,这可以是一个以 php: 为前缀的字符串,表示 PHP date() 函数可以识别的格式。

返回值 string

格式化后的结果。

抛出 yii\base\InvalidArgumentException

如果输入值不能评估为日期值。

抛出 yii\base\InvalidConfigException

如果日期格式无效。

                public function asTime($value, $format = null)
{
    if ($format === null) {
        $format = $this->timeFormat;
    }
    return $this->formatDateTimeValue($value, $format, 'time');
}

            
asTimestamp() 公共方法

将浮点数格式化为 Unix 时间戳(自 1970-01-01 以来的秒数),该浮点数表示日期、时间或日期时间。

public string asTimestamp ( $value )
$value integer|string|DateTime|DateTimeInterface|null

要格式化的值。支持以下类型的值

返回值 string

格式化后的结果。

                public function asTimestamp($value)
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    $timestamp = $this->normalizeDatetimeValue($value);
    return number_format($timestamp->format('U'), 0, '.', '');
}

            
asUrl() 公共方法

将值格式化为超链接。

public string asUrl ( $value, $options = [] )
$value mixed

要格式化的值。

$options array

标签选项,以名称-值对的形式表示。参见yii\helpers\Html::a()。从2.0.43版本开始,提供了一个特殊的选项scheme - 如果设置了它,则不会将其传递给yii\helpers\Html::a(),但它将通过规范化URL并确保其使用指定的方案来控制链接的URL协议部分。参见yii\helpers\Url::ensureScheme()。如果未设置scheme,则保留原始行为,即当在$value中找不到"://"字符串时添加"http://"前缀。

返回值 string

格式化后的结果。

                public function asUrl($value, $options = [])
{
    if ($value === null) {
        return $this->nullDisplay;
    }
    $url = $value;
    $scheme = ArrayHelper::remove($options, 'scheme');
    if ($scheme === null) {
        if (strpos($url, '://') === false) {
            $url = 'http://' . $url;
        }
    } else {
        $url = Url::ensureScheme($url, $scheme);
    }
    return Html::a(Html::encode($value), $url, $options);
}

            
asWeight() 公共方法 (自版本 2.0.13 起可用)

将值格式化为人类可读的重量形式,例如 12 kilograms

如果您需要更改值的单位作为最小单位的倍数,请检查属性 $baseUnits,并使用 $systemOfUnitsUNIT_SYSTEM_METRICUNIT_SYSTEM_IMPERIAL 之间切换。

public string asWeight ( $value, $decimals null, $options = [], $textOptions = [] )
$value float|integer

要格式化的值。

$decimals integer|null

小数点后的位数。

$options array

数字格式化程序的可选配置。此参数将与 $numberFormatterOptions 合并。

$textOptions array

数字格式化程序的可选配置。此参数将与 $numberFormatterTextOptions 合并。

返回值 string

格式化后的结果。

抛出 yii\base\InvalidArgumentException

如果输入值不是数字或格式化失败。

抛出 yii\base\InvalidConfigException

当未安装 INTL 或不包含所需信息时。

                public function asWeight($value, $decimals = null, $options = [], $textOptions = [])
{
    return $this->formatUnit(self::UNIT_WEIGHT, self::FORMAT_WIDTH_LONG, $value, $decimals, $options, $textOptions);
}

            
attachBehavior() 公共方法

定义于: yii\base\Component::attachBehavior()

将行为附加到此组件。

此方法将根据给定的配置创建行为对象。之后,通过调用yii\base\Behavior::attach()方法将行为对象附加到此组件。

另请参阅detachBehavior()

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name string

行为的名称。

$behavior string|array|yii\base\Behavior

行为配置。可以是以下之一:

返回值 yii\base\Behavior

行为对象

                public function attachBehavior($name, $behavior)
{
    $this->ensureBehaviors();
    return $this->attachBehaviorInternal($name, $behavior);
}

            
attachBehaviors() 公共方法

定义于: yii\base\Component::attachBehaviors()

将行为列表附加到组件。

每个行为都由其名称索引,并且应该是一个 yii\base\Behavior 对象、一个指定行为类的字符串或一个用于创建行为的配置数组。

另请参阅 attachBehavior()

public void attachBehaviors ( $behaviors )
$behaviors array

要附加到组件的行为列表

                public function attachBehaviors($behaviors)
{
    $this->ensureBehaviors();
    foreach ($behaviors as $name => $behavior) {
        $this->attachBehaviorInternal($name, $behavior);
    }
}

            
behaviors() 公共方法

定义于: yii\base\Component::behaviors()

返回此组件应具有的行为列表。

子类可以重写此方法以指定它们希望表现出的行为。

此方法的返回值应该是一个行为对象或配置数组,这些对象或配置数组由行为名称索引。行为配置可以是指定行为类的字符串,也可以是以下结构的数组

'behaviorName' => [
    'class' => 'BehaviorClass',
    'property1' => 'value1',
    'property2' => 'value2',
]

请注意,行为类必须扩展自 yii\base\Behavior。行为可以使用名称或匿名方式附加。当数组键使用名称时,使用此名称,稍后可以使用 getBehavior() 检索行为,或使用 detachBehavior() 分离行为。匿名行为无法检索或分离。

此方法中声明的行为将自动附加到组件(按需)。

public array behaviors ( )
返回值 array

行为配置。

                public function behaviors()
{
    return [];
}

            
canGetProperty() 公共方法

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

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

如果可以读取属性

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

另请参阅 canSetProperty()

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

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

返回值 boolean

属性是否可读

                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;
}

            
canSetProperty() 公共方法

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

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

如果可以写入属性

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

另请参阅 canGetProperty()

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

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

返回值 boolean

属性是否可写

                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;
}

            
className() 公共静态方法
自 2.0.14 版本起已弃用。在 PHP >=5.5 中,请改用 ::class

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

返回此类的完全限定名称。

public static string className ( )
返回值 string

此类的完整限定名称。

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

            
createNumberFormatter() 受保护方法

根据给定的类型和格式创建数字格式化程序。

您可以重写此方法以基于模式创建数字格式化程序。

protected NumberFormatter createNumberFormatter ( $style, $decimals null, $options = [], $textOptions = [] )
$style integer

数字格式化程序的类型。值:NumberFormatter::DECIMAL、::CURRENCY、::PERCENT、::SCIENTIFIC、::SPELLOUT、::ORDINAL ::DURATION、::PATTERN_RULEBASED、::DEFAULT_STYLE、::IGNORE

$decimals integer|null

小数点后的位数。

$options array

数字格式化程序的可选配置。此参数将与 $numberFormatterOptions 合并。

$textOptions array

数字格式化程序的可选配置。此参数将与 $numberFormatterTextOptions 合并。

返回值 NumberFormatter

创建的格式化程序实例

                protected function createNumberFormatter($style, $decimals = null, $options = [], $textOptions = [])
{
    $formatter = new NumberFormatter($this->locale, $style);
    // set text attributes
    foreach ($this->numberFormatterTextOptions as $attribute => $value) {
        $this->setFormatterTextAttribute($formatter, $attribute, $value, 'numberFormatterTextOptions', 'numberFormatterOptions');
    }
    foreach ($textOptions as $attribute => $value) {
        $this->setFormatterTextAttribute($formatter, $attribute, $value, '$textOptions', '$options');
    }
    // set attributes
    foreach ($this->numberFormatterOptions as $attribute => $value) {
        $this->setFormatterIntAttribute($formatter, $attribute, $value, 'numberFormatterOptions', 'numberFormatterTextOptions');
    }
    foreach ($options as $attribute => $value) {
        $this->setFormatterIntAttribute($formatter, $attribute, $value, '$options', '$textOptions');
    }
    if ($decimals !== null) {
        $formatter->setAttribute(NumberFormatter::MAX_FRACTION_DIGITS, $decimals);
        $formatter->setAttribute(NumberFormatter::MIN_FRACTION_DIGITS, $decimals);
    }
    // set symbols
    if ($this->decimalSeparator !== null) {
        $formatter->setSymbol(NumberFormatter::DECIMAL_SEPARATOR_SYMBOL, $this->decimalSeparator);
    }
    if ($this->currencyDecimalSeparator !== null) {
        $formatter->setSymbol(NumberFormatter::MONETARY_SEPARATOR_SYMBOL, $this->currencyDecimalSeparator);
    }
    if ($this->thousandSeparator !== null) {
        $formatter->setSymbol(NumberFormatter::GROUPING_SEPARATOR_SYMBOL, $this->thousandSeparator);
        $formatter->setSymbol(NumberFormatter::MONETARY_GROUPING_SEPARATOR_SYMBOL, $this->thousandSeparator);
    }
    foreach ($this->numberFormatterSymbols as $symbol => $value) {
        $this->setFormatterSymbol($formatter, $symbol, $value, 'numberFormatterSymbols');
    }
    return $formatter;
}

            
detachBehavior() 公共方法

定义于: yii\base\Component::detachBehavior()

从组件中分离行为。

将调用行为的 yii\base\Behavior::detach() 方法。

public yii\base\Behavior|null detachBehavior ( $name )
$name string

行为的名称。

返回值 yii\base\Behavior|null

分离的行为。如果行为不存在,则为 null。

                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;
}

            
detachBehaviors() 公共方法

定义于: yii\base\Component::detachBehaviors()

从组件中分离所有行为。

public void detachBehaviors ( )

                public function detachBehaviors()
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $name => $behavior) {
        $this->detachBehavior($name);
    }
}

            
ensureBehaviors() 公共方法

定义于: yii\base\Component::ensureBehaviors()

确保在 behaviors() 中声明的行为已附加到此组件。

public void ensureBehaviors ( )

                public function ensureBehaviors()
{
    if ($this->_behaviors === null) {
        $this->_behaviors = [];
        foreach ($this->behaviors() as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }
}

            
format() 公共方法

根据给定的格式类型格式化值。

此方法将调用此类中可用的“as”方法之一来执行格式化。对于类型“xyz”,将使用方法“asXyz”。例如,如果格式为“html”,则将使用 asHtml()。格式名称不区分大小写。

public string format ( $value, $format )
$value mixed

要格式化的值。

$format string|array|Closure

值的格式,例如“html”、“text”或返回格式化值的匿名函数。

要指定格式化方法的其他参数,可以使用数组。数组的第一个元素指定格式名称,其余元素将用作格式化方法的参数。例如,格式 ['date', 'Y-m-d'] 将导致调用 asDate($value, 'Y-m-d')

匿名函数签名应为:function($value, $formatter),其中 $value 是要格式化的值,$formatter 是 Formatter 类的实例,可用于调用其他格式化函数。从 2.0.13 版本开始可以使用匿名函数。

返回值 string

格式化结果。

抛出 yii\base\InvalidArgumentException

如果此类不支持格式类型。

                public function format($value, $format)
{
    if ($format instanceof Closure) {
        return $format($value, $this);
    }
    if (is_array($format)) {
        if (!isset($format[0])) {
            throw new InvalidArgumentException('The $format array must contain at least one element.');
        }
        $f = $format[0];
        $format[0] = $value;
        $params = $format;
        $format = $f;
    } else {
        $params = [$value];
    }
    $method = 'as' . $format;
    if ($this->hasMethod($method)) {
        return call_user_func_array([$this, $method], array_values($params));
    }
    throw new InvalidArgumentException("Unknown format type: $format");
}

            
formatNumber() 受保护方法 (自 2.0.32 版本起可用)

给定以字节为单位的值,格式化人类可读形式的数字部分。

protected 数组 formatNumber ( $value, $decimals, $maxPosition, $formatBase, $options, $textOptions )
$value string|integer|float

要格式化的字节数。

$decimals integer|null

小数点后的位数

$maxPosition integer

大小单位的最大内部位置,如果 $formatBase 是数组则忽略

$formatBase 数组|整数

计算每个下一个单位的基数,可以是 1000 或 1024,或者是一个数组

$options array

数字格式化程序的可选配置。此参数将与 $numberFormatterOptions 合并。

$textOptions array

数字格式化程序的可选配置。此参数将与 $numberFormatterTextOptions 合并。

返回值 array

[包含格式化数字和大小单位内部位置的 Yii::t 参数]

抛出 yii\base\InvalidArgumentException

如果输入值不是数字或格式化失败。

                protected function formatNumber($value, $decimals, $maxPosition, $formatBase, $options, $textOptions)
{
    $value = $this->normalizeNumericValue($value);
    $position = 0;
    if (is_array($formatBase)) {
        $maxPosition = count($formatBase) - 1;
    }
    do {
        if (is_array($formatBase)) {
            if (!isset($formatBase[$position + 1])) {
                break;
            }
            if (abs($value) < $formatBase[$position + 1]) {
                break;
            }
        } else {
            if (abs($value) < $formatBase) {
                break;
            }
            $value /= $formatBase;
        }
        $position++;
    } while ($position < $maxPosition + 1);
    if (is_array($formatBase) && $position !== 0) {
        $value /= $formatBase[$position];
    }
    // no decimals for smallest unit
    if ($position === 0) {
        $decimals = 0;
    } elseif ($decimals !== null) {
        $value = round($value, $decimals);
    }
    // disable grouping for edge cases like 1023 to get 1023 B instead of 1,023 B
    $oldThousandSeparator = $this->thousandSeparator;
    $this->thousandSeparator = '';
    if ($this->_intlLoaded && !isset($options[NumberFormatter::GROUPING_USED])) {
        $options[NumberFormatter::GROUPING_USED] = 0;
    }
    // format the size value
    $params = [
        // this is the unformatted number used for the plural rule
        // abs() to make sure the plural rules work correctly on negative numbers, intl does not cover this
        // https://english.stackexchange.com/questions/9735/is-1-followed-by-a-singular-or-plural-noun
        'n' => abs($value),
        // this is the formatted number used for display
        'nFormatted' => $this->asDecimal($value, $decimals, $options, $textOptions),
    ];
    $this->thousandSeparator = $oldThousandSeparator;
    return [$params, $position];
}

            
getBehavior() 公共方法

定义于: yii\base\Component::getBehavior()

返回命名的行为对象。

public yii\base\Behavior|null getBehavior ( $name )
$name string

行为名称

返回值 yii\base\Behavior|null

行为对象,如果行为不存在则为 null

                public function getBehavior($name)
{
    $this->ensureBehaviors();
    return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}

            
getBehaviors() 公共方法

定义于: yii\base\Component::getBehaviors()

返回附加到此组件的所有行为。

public yii\base\Behavior[] getBehaviors ( )
返回值 yii\base\Behavior[]

附加到此组件的行为列表

                public function getBehaviors()
{
    $this->ensureBehaviors();
    return $this->_behaviors;
}

            
hasEventHandlers() 公共方法

定义于: yii\base\Component::hasEventHandlers()

返回一个值,指示是否有任何处理程序附加到命名的事件。

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

事件名称

返回值 boolean

事件是否附加了任何处理程序。

                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);
}

            
hasMethod() 公共方法

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

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

如果以下条件成立,则定义了方法

  • 类具有指定名称的方法
  • 附加的行为具有给定名称的方法(当 $checkBehaviors 为 true 时)。
public 布尔值 hasMethod ( $name, $checkBehaviors true )
$name string

属性名称

$checkBehaviors boolean

是否将行为的方法视为此组件的方法

返回值 boolean

方法是否已定义

                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;
}

            
hasProperty() 公共方法

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

返回一个值,指示是否为此组件定义了属性。

如果以下条件成立,则定义了属性

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

另请参阅

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

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

返回值 boolean

属性是否已定义

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

            
init() 公共方法

初始化对象。

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

public void init ( )

                public function init()
{
    if ($this->timeZone === null) {
        $this->timeZone = Yii::$app->timeZone;
    }
    if ($this->locale === null) {
        $this->locale = Yii::$app->language;
    }
    if ($this->language === null) {
        $this->language = strtok($this->locale, '@');
    }
    if ($this->booleanFormat === null) {
        $this->booleanFormat = [Yii::t('yii', 'No', [], $this->language), Yii::t('yii', 'Yes', [], $this->language)];
    }
    if ($this->nullDisplay === null) {
        $this->nullDisplay = '<span class="not-set">' . Yii::t('yii', '(not set)', [], $this->language) . '</span>';
    }
    $this->_intlLoaded = extension_loaded('intl');
    if (!$this->_intlLoaded) {
        if ($this->decimalSeparator === null) {
            $this->decimalSeparator = '.';
        }
        if ($this->thousandSeparator === null) {
            $this->thousandSeparator = ',';
        }
    }
}

            
isNormalizedValueMispresented() 受保护方法 (自 2.0.16 版本起可用)

检查给定值及其规范化版本的字符串表示形式是否不同。

protected 布尔值 isNormalizedValueMispresented ( $value, $normalizedValue )
$value 字符串|浮点数|整数
$normalizedValue float|integer

                protected function isNormalizedValueMispresented($value, $normalizedValue)
{
    if (empty($value)) {
        $value = 0;
    }
    return (string) $normalizedValue !== $this->normalizeNumericStringValue((string) $value);
}

            
normalizeDatetimeValue() 受保护方法

将给定的日期时间值规范化为 DateTime 对象,该对象可被各种日期/时间格式化方法采用。

protected DateTime|数组 normalizeDatetimeValue ( $value, $checkDateTimeInfo false )
$value integer|string|DateTime|DateTimeInterface|null

要规范化的日期时间值。支持以下类型的值

$checkDateTimeInfo boolean

是否还要检查日期/时间值是否附加了一些时间和日期信息。默认为 false。如果为 true,则该方法将返回一个数组,其中第一个元素是规范化的时间戳,第二个是指示时间戳是否具有时间信息的布尔值,第三个是指示时间戳是否具有日期信息的布尔值。此参数自 2.0.1 版本起可用。

返回值 DateTime|数组

规范化的日期时间值 自 2.0.1 版本起,如果 $checkDateTimeInfo 为 true,则此方法也可能返回一个数组。数组的第一个元素是规范化的时间戳,第二个是指示时间戳是否具有时间信息或仅是日期值的布尔值。自 2.0.12 版本起,数组具有第三个布尔值元素,指示时间戳是否具有日期信息或仅是时间值。

抛出 yii\base\InvalidArgumentException

如果输入值不能评估为日期值。

                protected function normalizeDatetimeValue($value, $checkDateTimeInfo = false)
{
    // checking for DateTime and DateTimeInterface is not redundant, DateTimeInterface is only in PHP>5.5
    if ($value === null || $value instanceof DateTime || $value instanceof DateTimeInterface) {
        // skip any processing
        return $checkDateTimeInfo ? [$value, true, true] : $value;
    }
    if (empty($value)) {
        $value = 0;
    }
    try {
        if (is_numeric($value)) { // process as unix timestamp, which is always in UTC
            $timestamp = new DateTime('@' . (int) $value, new DateTimeZone('UTC'));
            return $checkDateTimeInfo ? [$timestamp, true, true] : $timestamp;
        }
        if (
            ($timestamp = DateTime::createFromFormat(
                'Y-m-d|',
                $value,
                new DateTimeZone($this->defaultTimeZone)
            )
            ) !== false
        ) { // try Y-m-d format (support invalid dates like 2012-13-01)
            return $checkDateTimeInfo ? [$timestamp, false, true] : $timestamp;
        }
        if (
            ($timestamp = DateTime::createFromFormat(
                'Y-m-d H:i:s',
                $value,
                new DateTimeZone($this->defaultTimeZone)
            )
            ) !== false
        ) { // try Y-m-d H:i:s format (support invalid dates like 2012-13-01 12:63:12)
            return $checkDateTimeInfo ? [$timestamp, true, true] : $timestamp;
        }
        // finally try to create a DateTime object with the value
        if ($checkDateTimeInfo) {
            $timestamp = new DateTime($value, new DateTimeZone($this->defaultTimeZone));
            $info = date_parse($value);
            return [
                $timestamp,
                !($info['hour'] === false && $info['minute'] === false && $info['second'] === false),
                !($info['year'] === false && $info['month'] === false && $info['day'] === false && empty($info['zone'])),
            ];
        }
        return new DateTime($value, new DateTimeZone($this->defaultTimeZone));
    } catch (\Exception $e) {
        throw new InvalidArgumentException("'$value' is not a valid date time value: " . $e->getMessage()
            . "\n" . print_r(DateTime::getLastErrors(), true), $e->getCode(), $e);
    }
}

            
normalizeNumericStringValue() 受保护方法 (自 2.0.16 版本起可用)

规范化数字字符串值。

protected 字符串 normalizeNumericStringValue ( $value )
$value string
返回值 string

作为字符串的规范化数字值

                protected function normalizeNumericStringValue($value)
{
    $powerPosition = strrpos($value, 'E');
    if ($powerPosition !== false) {
        $valuePart = substr($value, 0, $powerPosition);
        $powerPart = substr($value, $powerPosition + 1);
    } else {
        $powerPart = null;
        $valuePart = $value;
    }
    $separatorPosition = strrpos($valuePart, '.');
    if ($separatorPosition !== false) {
        $integerPart = substr($valuePart, 0, $separatorPosition);
        $fractionalPart = substr($valuePart, $separatorPosition + 1);
    } else {
        $integerPart = $valuePart;
        $fractionalPart = null;
    }
    // truncate insignificant zeros, keep minus
    $integerPart = preg_replace('/^\+?(-?)0*(\d+)$/', '$1$2', $integerPart);
    // for zeros only leave one zero, keep minus
    $integerPart = preg_replace('/^\+?(-?)0*$/', '${1}0', $integerPart);
    if ($fractionalPart !== null) {
        // truncate insignificant zeros
        $fractionalPart = rtrim($fractionalPart, '0');
        if (empty($fractionalPart)) {
            $fractionalPart = $powerPart !== null ? '0' : null;
        }
    }
    $normalizedValue = $integerPart;
    if ($fractionalPart !== null) {
        $normalizedValue .= '.' . $fractionalPart;
    } elseif ($normalizedValue === '-0') {
        $normalizedValue = '0';
    }
    if ($powerPart !== null) {
        $normalizedValue .= 'E' . $powerPart;
    }
    return $normalizedValue;
}

            
normalizeNumericValue() 受保护方法

规范化数字输入值。

  • 所有 empty 将导致 0
  • 数字 字符串将强制转换为浮点数

  • 如果输入值是数字,则返回其他所有内容,否则抛出异常。
受保护的 浮点数|整数 normalizeNumericValue ( $value )
$value mixed

输入值

返回值 float|integer

标准化的数值

抛出 yii\base\InvalidArgumentException

如果输入值不是数字。

                protected function normalizeNumericValue($value)
{
    if (empty($value)) {
        return 0;
    }
    if (is_string($value) && is_numeric($value)) {
        $value = (float) $value;
    }
    if (!is_numeric($value)) {
        throw new InvalidArgumentException("'$value' is not a numeric value.");
    }
    return $value;
}

            
off() 公共方法

定义于: yii\base\Component::off()

从此组件中分离现有的事件处理程序。

此方法与 on() 相反。

注意:如果为事件名称传递通配符模式,则只会删除使用此通配符注册的处理程序,而使用与该通配符匹配的普通名称注册的处理程序将保留。

另请参阅 on()

公共的 布尔值 off ( $name, $handler null )
$name string

事件名称

$handler 可调用|

要移除的事件处理程序。如果它是 null,则将移除附加到命名事件的所有处理程序。

返回值 boolean

如果找到并分离了一个处理程序

                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;
}

            
on() 公共方法

定义于: yii\base\Component::on()

将事件处理程序附加到事件。

事件处理程序必须是有效的 PHP 回调。以下是一些示例

function ($event) { ... }         // anonymous function
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // global function handleClick()

事件处理程序必须使用以下签名定义,

function ($event)

其中$event是一个yii\base\Event对象,其中包含与事件关联的参数。

从 2.0.14 开始,您可以将事件名称指定为通配符模式

$component->on('event.group.*', function ($event) {
    Yii::trace($event->name . ' is triggered.');
});

另请参阅 off()

公共的 on ( $name, $handler, $data null, $append true )
$name string

事件名称

$handler 可调用

事件处理程序

$data mixed

触发事件时传递给事件处理程序的数据。当调用事件处理程序时,可以通过 yii\base\Event::$data 访问此数据。

$append boolean

是否将新的事件处理程序附加到现有处理程序列表的末尾。如果为 false,则新的处理程序将插入到现有处理程序列表的开头。

                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]);
    }
}

            
trigger() 公共方法

定义于: yii\base\Component::trigger()

触发事件。

此方法表示事件的发生。它调用事件的所有附加处理程序,包括类级处理程序。

公共的 trigger ( $name, yii\base\Event $event null )
$name string

事件名称

$event yii\base\Event|

事件实例。如果未设置,则将创建一个默认的 yii\base\Event 对象。

                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);
}