Class yii\base\Component

继承yii\base\Component » yii\base\BaseObject
实现yii\base\Configurable
子类yii\base\Action, yii\base\Application, yii\base\Controller, yii\base\DynamicModel, yii\base\ErrorHandler, yii\base\InlineAction, yii\base\Model, yii\base\Module, yii\base\Request, yii\base\Response, yii\base\Security, yii\base\Theme, yii\base\View, yii\base\ViewRenderer, yii\base\Widget, yii\caching\ApcCache, yii\caching\ArrayCache, yii\caching\Cache, yii\caching\DbCache, yii\caching\DummyCache, yii\caching\FileCache, yii\caching\MemCache, yii\caching\WinCache, yii\caching\XCache, yii\caching\ZendDataCache, yii\captcha\Captcha, yii\captcha\CaptchaAction, yii\captcha\CaptchaValidator, yii\console\Application, yii\console\Controller, yii\console\ErrorHandler, yii\console\Request, yii\console\Response, yii\console\controllers\AssetController, yii\console\controllers\BaseMigrateController, yii\console\controllers\CacheController, yii\console\controllers\FixtureController, yii\console\controllers\HelpController, yii\console\controllers\MessageController, yii\console\controllers\MigrateController, yii\console\controllers\ServeController, yii\console\widgets\Table, yii\data\ActiveDataFilter, yii\data\ActiveDataProvider, yii\data\ArrayDataProvider, yii\data\BaseDataProvider, yii\data\DataFilter, yii\data\SqlDataProvider, yii\db\ActiveQuery, yii\db\ActiveRecord, yii\db\BaseActiveRecord, yii\db\Command, yii\db\Connection, yii\db\Migration, yii\db\Query, yii\db\SqlTokenizer, yii\db\oci\Command, yii\db\sqlite\Command, yii\db\sqlite\SqlTokenizer, yii\di\Container, yii\di\ServiceLocator, yii\filters\AccessRule, yii\grid\GridView, yii\i18n\DbMessageSource, yii\i18n\Formatter, yii\i18n\GettextFile, yii\i18n\GettextMessageSource, yii\i18n\GettextMoFile, yii\i18n\GettextPoFile, yii\i18n\I18N, yii\i18n\Locale, yii\i18n\MessageFormatter, yii\i18n\MessageSource, yii\i18n\PhpMessageSource, yii\log\DbTarget, yii\log\Dispatcher, yii\log\EmailTarget, yii\log\FileTarget, yii\log\Logger, yii\log\SyslogTarget, yii\log\Target, yii\mail\BaseMailer, yii\mutex\DbMutex, yii\mutex\FileMutex, yii\mutex\Mutex, yii\mutex\MysqlMutex, yii\mutex\OracleMutex, yii\mutex\PgsqlMutex, yii\rbac\BaseManager, yii\rbac\DbManager, yii\rbac\PhpManager, yii\rest\Action, yii\rest\ActiveController, yii\rest\Controller, yii\rest\CreateAction, yii\rest\DeleteAction, yii\rest\IndexAction, yii\rest\OptionsAction, yii\rest\Serializer, yii\rest\UpdateAction, yii\rest\ViewAction, yii\test\ActiveFixture, yii\test\ArrayFixture, yii\test\BaseActiveFixture, yii\test\DbFixture, yii\test\Fixture, yii\test\InitDbFixture, yii\validators\BooleanValidator, yii\validators\CompareValidator, yii\validators\DateValidator, yii\validators\DefaultValueValidator, yii\validators\EachValidator, yii\validators\EmailValidator, yii\validators\ExistValidator, yii\validators\FileValidator, yii\validators\FilterValidator, yii\validators\ImageValidator, yii\validators\InlineValidator, yii\validators\IpValidator, yii\validators\NumberValidator, yii\validators\RangeValidator, yii\validators\RegularExpressionValidator, yii\validators\RequiredValidator, yii\validators\SafeValidator, yii\validators\StringValidator, yii\validators\UniqueValidator, yii\validators\UrlValidator, yii\validators\Validator, yii\web\Application, yii\web\AssetConverter, yii\web\AssetManager, yii\web\CacheSession, yii\web\Controller, yii\web\DbSession, yii\web\ErrorAction, yii\web\ErrorHandler, yii\web\HtmlResponseFormatter, yii\web\JsonResponseFormatter, yii\web\MultiFieldSession, yii\web\Request, yii\web\Response, yii\web\Session, yii\web\UrlManager, yii\web\User, yii\web\View, yii\web\ViewAction, yii\web\XmlResponseFormatter, yii\widgets\ActiveField, yii\widgets\ActiveForm, yii\widgets\BaseListView, yii\widgets\Block, yii\widgets\Breadcrumbs, yii\widgets\ContentDecorator, yii\widgets\DetailView, yii\widgets\FragmentCache, yii\widgets\InputWidget, yii\widgets\LinkPager, yii\widgets\LinkSorter, yii\widgets\ListView, yii\widgets\MaskedInput, yii\widgets\Menu, yii\widgets\Pjax, yii\widgets\Spaceless
可用自版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/base/Component.php

Component 是实现 属性(property), 事件(event)行为(behavior) 特性的基类.

除了在其父类 BaseObject 中实现的 属性(property) 特性之外, Component 还提供了 事件(event)行为(behavior) 特性.

事件(event)是一种将自定义代码"注入(inject)"到特定位置的现有代码中的一种方式. 例如, 当用户添加评论时, 评论对象(comment)可以触发"add"事件. 我们可以编写自定义代码并将其附加到此事件, 以便在事件触发时(即添加注释), 我们的自定义代码将被执行.

事件(event)由在它定义的类中应该是唯一的名称来标识. 事件名称区分大小写.

可以将一个或多个 PHP 回调(称为事件处理程序)附加到事件. 你可以调用 trigger() 来触发事件. 当事件触发时, 将按照附加的顺序自动调用事件处理程序.

要将事件处理程序附加到事件, 请调用 on():

$post->on('update', function ($event) {
    // 发送邮件通知
});

在上例中, 一个匿名函数附加到帖子(post)的update事件. 你可以附加以下类型的事件处理程序:

  • 匿名函数: function ($event) { ... }
  • 对象方法: [$object, 'handleAdd']
  • 静态类方法: ['Page', 'handleAdd']
  • 全局函数: 'handleAdd'

事件处理程序的签名应如下所示:

function foo($event)

其中$eventyii\base\Event 对象, 它包含与该事件相关联的参数.

在使用配置数组配置组件时, 也可以将处理程序附加到事件. 语法如下所示:

[
    'on add' => function ($event) { ... }
]

其中on add表示将事件附加到add事件.

有时, 你可能需要在将事件附加到事件处理程序时, 将额外的数据与事件相关联, 然后在调用处理程序时访问它, 你可以这样做:

$post->on('update', function ($event) {
    // 数据可以通过 $event->data 访问
}, $data);

行为(behavior)是 yii\base\Behavior 或其子类的实例. 组件可以附加一个或多个行为. 当行为附加到组件时, 它的公共属性和方法可以通过该组件直接访问, 就好像组件拥有这些属性和方法一样.

要将行为附加到组件, 请在 behaviors() 中声明, 或者显式的调用 attachBehavior(). 在 behaviors() 中声明的行为会自动附加到相应的组件.

在使用配置数组配置组件时, 也可以将行为附加到组件. 语法如下:

[
    'as tree' => [
        'class' => 'Tree',
    ],
]

其中as tree表示附加名为tree的行为, 并且该数组将传递给 Yii::createObject() 来创建行为对象.

有关组件(Component)的更多详细信息和使用信息, 请参阅 权威指南 - 关键概念 - 组件(Component).

公共属性

隐藏继承的属性

属性类型描述定义在
$behaviors yii\base\Behavior[] 附加到此组件的行为列表. 该属性是只读的. yii\base\Component

公共方法

隐藏继承的方法

方法描述定义在
__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
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
getBehavior() 返回指定的行为对象. yii\base\Component
getBehaviors() 返回附加到此组件的所有行为. yii\base\Component
hasEventHandlers() 返回一个值, 指示是否有任何处理程序附加到指定的事件. yii\base\Component
hasMethod() 返回一个值, 指示方法是否已定义. yii\base\Component
hasProperty() 返回一个值, 指示属性是否已定义. yii\base\Component
init() 初始化对象. yii\base\BaseObject
off() 从该组件分离现有的事件处理程序. yii\base\Component
on() 将事件处理程序附加到事件. yii\base\Component
trigger() 触发事件. yii\base\Component

属性详情

$behaviors public 属性

附加到此组件的行为列表. 该属性是只读的.

public yii\base\Behavior[] $behaviors null

方法详情

__call() public 方法

调用不是类方法的指定的方法.

该方法将检查是否有任何附加行为具有指定的方法, 并将在可用时执行它.

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

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

方法的名称.

$params array

方法的参数.

return mixed

方法的返回值.

throws yii\base\UnknownMethodException

当调用未知方法时.

__clone() public 方法

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

它会删除所有行为, 因为它们附加在旧对象上.

public void __clone ( )
__get() public 方法

返回组件属性的值.

该方法将按照以下顺序检查并采取相应措施:

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

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

参见 __set().

public mixed __get ( $name )
$name string

属性名称.

return mixed

属性值或行为属性的值.

throws yii\base\UnknownPropertyException

如果该属性未定义.

throws yii\base\InvalidCallException

如果该属性是只写的.

__isset() public 方法

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

该方法将按照以下顺序检查并采取相应措施:

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

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

参见 https://secure.php.net/manual/en/function.isset.php.

public boolean __isset ( $name )
$name string

属性名称或事件名称.

return boolean

Whether 指定的属性是否已设置.

__set() public 方法

设置组件属性的值.

该方法将按照以下顺序检查并采取相应措施:

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

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

参见 __get().

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

属性名称或事件名称.

$value mixed

属性的值.

throws yii\base\UnknownPropertyException

如果该属性未定义.

throws yii\base\InvalidCallException

如果该属性是只读的.

__unset() public 方法

将组件属性设置为null.

该方法将按照以下顺序检查并采取相应措施:

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

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

参见 https://secure.php.net/manual/en/function.unset.php.

public void __unset ( $name )
$name string

属性名称.

throws yii\base\InvalidCallException

如果该属性是只读的.

attachBehavior() public 方法

将行为附加到此组件.

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

参见 detachBehavior().

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

行为的名称.

$behavior string|array|yii\base\Behavior

行为配置. 这可以是以下之一:

return yii\base\Behavior

行为对象.

attachBehaviors() public 方法

将行为列表附加到组件.

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

参见 attachBehavior().

public void attachBehaviors ( $behaviors )
$behaviors array

要附加到组件的行为列表.

behaviors() public 方法

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

子类可以重写此方法来指定他们应该具有的行为.

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

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

Note: 行为类必须从 yii\base\Behavior 扩展. 可以使用名称或匿名方式附加行为. 当使用名称作为数组键时, 使用此名称, 稍后可以使用 getBehavior() 检索该行为, 或者使用 detachBehavior() 进行分离. 匿名行为无法检索或分离.

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

public array behaviors ( )
return array

行为配置.

canGetProperty() public 方法

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

在以下情况下, 属性是可读的:

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

参见 canSetProperty().

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

属性名称.

$checkVars boolean

是否将成员变量视为属性.

$checkBehaviors boolean

是否将行为的属性视为该组件的属性.

return boolean

属性是否可读取.

canSetProperty() public 方法

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

在以下情况下, 属性是可设置的:

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

参见 canGetProperty().

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

属性名称.

$checkVars boolean

是否将成员变量视为属性.

$checkBehaviors boolean

是否将行为的属性视为该组件的属性.

return boolean

方法是否可设置.

detachBehavior() public 方法

从组件中分离一个行为.

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

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

行为的名称.

return null|yii\base\Behavior

分离后的行为. 如果行为不存在, 则返回null.

detachBehaviors() public 方法

分离组件中的所有行为.

public void detachBehaviors ( )
ensureBehaviors() public 方法

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

public void ensureBehaviors ( )
getBehavior() public 方法

返回指定的行为对象.

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

行为的名称.

return null|yii\base\Behavior

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

getBehaviors() public 方法

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

public yii\base\Behavior[] getBehaviors ( )
return yii\base\Behavior[]

附加到此组件的行为列表.

hasEventHandlers() public 方法

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

public boolean hasEventHandlers ( $name )
$name string

事件的名称.

return boolean

是否有任何处理程序附加到该事件.

hasMethod() public 方法

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

在以下情况下, 方法是已定义的:

  • 该类有一个具有指定名称的方法;
  • 附加行为具有指定名称的方法(当$checkBehaviorstrue时).
public boolean hasMethod ( $name, $checkBehaviors true )
$name string

属性名称

$checkBehaviors boolean

是否将行为的方法视为该组件的方法.

return boolean

方法是否已定义.

hasProperty() public 方法

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

在以下情况下, 属性是已定义的:

  • 该类具有与指定名称相关联的gettersetter方法(在这种情况下, 属性名称不区分大小写);
  • 该类有一个具有指定名称的成员变量(当$checkVarstrue时);
  • 附加行为具有指定名称的属性(当$checkBehaviorstrue时).

参见:

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

属性名称.

$checkVars boolean

是否将成员变量视为属性.

$checkBehaviors boolean

是否将行为的属性视为该组件的属性.

return boolean

属性是否已定义.

off() public 方法

从该组件分离现有的事件处理程序.

该方法与 on() 相反.

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

参见 on().

public boolean off ( $name, $handler null )
$name string

事件的名称.

$handler callable

要删除的事件处理程序. 如果为null, 则将删除附加到指定事件的所有处理程序.

return boolean

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

on() public 方法

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

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

function ($event) { ... }         // 匿名函数
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // 全局函数 handleClick()

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

function ($event)

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

自 2.0.14 开始, 你可以将事件名称指定为通配符模式:

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

参见 off().

public void on ( $name, $handler, $data null, $append true )
$name string

事件的名称.

$handler callable

事件处理程序.

$data mixed

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

$append boolean

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

trigger() public 方法

触发事件.

该方法代表事件的发生. 它调用该事件的所有附加处理程序, 包括类级别的处理程序.

public void trigger ( $name, yii\base\Event $event null )
$name string

事件的名称.

$event yii\base\Event

事件的参数. 如果未设置, 将创建默认的 yii\base\Event 对象.