0 关注者

类 yii\widgets\Block

继承yii\widgets\Block » yii\base\Widget » yii\base\Component » yii\base\BaseObject
实现yii\base\Configurable, yii\base\ViewContextInterface
自版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/widgets/Block.php

Block 记录 begin()end() 调用之间输出的所有内容,并将其存储在 yii\base\View::$blocks

以便以后使用。

yii\base\View 组件包含两个方法 yii\base\View::beginBlock()yii\base\View::endBlock()。一般思路是,您在视图或布局中定义块默认值。

<?php $this->beginBlock('messages', true) ?>
Nothing.
<?php $this->endBlock() ?>

然后在子视图中覆盖默认值。

<?php $this->beginBlock('username') ?>
Umm... hello?
<?php $this->endBlock() ?>

第二个参数定义块内容是否应输出,这在呈现其内容时是期望的,但在子视图中重新定义它时不是期望的。

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$autoIdPrefix 字符串 自动生成的部件 ID 的前缀。 yii\base\Widget
$behaviors yii\base\Behavior[] 附加到此组件的行为列表。 yii\base\Component
$id 字符串| 部件的 ID。 yii\base\Widget
$renderInPlace 布尔值 是否就地呈现块内容。默认为 false,这意味着捕获的块内容将不会显示。 yii\widgets\Block
$view yii\web\View 可用于呈现视图或视图文件的视图对象。 yii\base\Widget
$viewPath 字符串 包含此部件视图文件的目录。 yii\base\Widget

公共方法

隐藏继承的方法

方法 描述 定义于
__call() 调用未作为类方法的方法。 yii\base\Component
__clone() 在克隆现有对象后调用此方法。 yii\base\Component
__construct() 构造函数。 yii\base\BaseObject
__get() 返回组件属性的值。 yii\base\Component
__isset() 检查属性是否已设置,即已定义且不为空。 yii\base\Component
__set() 设置组件属性的值。 yii\base\Component
__unset() 将组件属性设置为 null。 yii\base\Component
afterRun() 在执行部件后立即调用此方法。 yii\base\Widget
attachBehavior() 将行为附加到此组件。 yii\base\Component
attachBehaviors() 将行为列表附加到组件。 yii\base\Component
beforeRun() 在执行部件之前立即调用此方法。 yii\base\Widget
begin() 开始部件。 yii\base\Widget
behaviors() 返回此组件应表现出的行为列表。 yii\base\Component
canGetProperty() 返回一个指示属性是否可读的值。 yii\base\Component
canSetProperty() 返回一个指示属性是否可设置的值。 yii\base\Component
className() 返回此类的完全限定名称。 yii\base\BaseObject
detachBehavior() 从组件中分离行为。 yii\base\Component
detachBehaviors() 从组件中分离所有行为。 yii\base\Component
end() 结束部件。 yii\base\Widget
ensureBehaviors() 确保 behaviors() 中声明的行为附加到此组件。 yii\base\Component
getBehavior() 返回命名行为对象。 yii\base\Component
getBehaviors() 返回附加到此组件的所有行为。 yii\base\Component
getId() 返回部件的 ID。 yii\base\Widget
getView() 返回可用于呈现视图或视图文件的视图对象。 yii\base\Widget
getViewPath() 返回包含此部件视图文件的目录。 yii\base\Widget
hasEventHandlers() 返回一个指示是否附加了对命名事件的任何处理程序的值。 yii\base\Component
hasMethod() 返回一个指示方法是否已定义的值。 yii\base\Component
hasProperty() 返回一个指示此组件是否定义了属性的值。 yii\base\Component
init() 开始记录块。 yii\widgets\Block
off() 从此组件中分离现有事件处理程序。 yii\base\Component
on() 将事件处理程序附加到事件。 yii\base\Component
render() 呈现视图。 yii\base\Widget
renderFile() 呈现视图文件。 yii\base\Widget
run() 结束记录块。 yii\widgets\Block
setId() 设置部件的 ID。 yii\base\Widget
setView() 设置此部件要使用的视图对象。 yii\base\Widget
trigger() 触发事件。 yii\base\Component
widget() 创建部件实例并运行它。 yii\base\Widget

事件

隐藏继承的事件

事件 类型 描述 定义于
EVENT_AFTER_RUN yii\base\WidgetEvent 在执行部件后立即引发事件。(自 2.0.11 版本起可用) yii\base\Widget
EVENT_BEFORE_RUN yii\base\WidgetEvent 在执行部件之前立即引发事件。(自 2.0.11 版本起可用) yii\base\Widget
EVENT_INIT yii\base\Event 通过 init() 初始化部件时触发的事件。(自 2.0.11 版本起可用) yii\base\Widget

属性详细信息

隐藏继承的属性

$renderInPlace 公共属性

是否就地呈现块内容。默认为 false,这意味着捕获的块内容将不会显示。

public 布尔值 $renderInPlace false

方法详细信息

隐藏继承的方法

__call() 公共方法

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

调用未作为类方法的方法。

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

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

public 混合 __call ( $name, $params )
$name 字符串

方法名称

$params 数组

方法参数

返回 混合型

方法返回值

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

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

                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 字符串

属性名称

返回 混合型

属性值或行为属性的值

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

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

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

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

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

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

public 布尔型 __isset ( $name )
$name 字符串

属性名称或事件名称

返回 布尔值

命名属性是否已设置

                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 字符串

属性名称或事件名称

$value 混合型

属性值

抛出 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 字符串

属性名称

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

            
afterRun() 公共方法 (自 2.0.11 版本起可用)

定义于: yii\base\Widget::afterRun()

在执行部件后立即调用此方法。

该方法将触发 EVENT_AFTER_RUN 事件。方法的返回值将用作小部件的返回值。

如果覆盖此方法,您的代码应如下所示

public function afterRun($result)
{
    $result = parent::afterRun($result);
    // your custom code here
    return $result;
}
public mixed afterRun ( $result )
$result 混合型

小部件的返回结果。

返回 混合型

处理后的部件结果。

                public function afterRun($result)
{
    $event = new WidgetEvent();
    $event->result = $result;
    $this->trigger(self::EVENT_AFTER_RUN, $event);
    return $event->result;
}

            
attachBehavior() 公共方法

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

将行为附加到此组件。

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

另请参阅 detachBehavior()

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name 字符串

行为的名称。

$behavior 字符串|数组|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 数组

要附加到组件的行为列表

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

            
beforeRun() 公共方法 (自 2.0.11 版本起可用)

定义于: yii\base\Widget::beforeRun()

在执行部件之前立即调用此方法。

该方法将触发 EVENT_BEFORE_RUN 事件。方法的返回值将决定小部件是否继续运行。

覆盖此方法时,请确保调用父实现,如下所示

public function beforeRun()
{
    if (!parent::beforeRun()) {
        return false;
    }

    // your custom code here

    return true; // or false to not run the widget
}
public 布尔型 beforeRun ( )
返回 布尔值

小部件是否应继续执行。

                public function beforeRun()
{
    $event = new WidgetEvent();
    $this->trigger(self::EVENT_BEFORE_RUN, $event);
    return $event->isValid;
}

            
begin() 公共静态方法

定义于: yii\base\Widget::begin()

开始部件。

此方法创建调用类的实例。它将配置应用于创建的实例。随后应调用匹配的 end() 方法。由于某些小部件可能使用输出缓冲区,因此应在同一视图中调用 end() 方法,以避免破坏输出缓冲区的嵌套。

另请参阅 end()

公共静态 静态 begin ( $config = [] )
$config 数组

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

返回 yii\base\Widget

新创建的小部件实例

                public static function begin($config = [])
{
    $config['class'] = get_called_class();
    /* @var $widget Widget */
    $widget = Yii::createObject($config);
    self::$stack[] = $widget;
    return $widget;
}

            
behaviors() 公共方法

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

返回此组件应表现出的行为列表。

子类可以覆盖此方法来指定它们想要的行为。

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

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

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

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

公共 数组 behaviors ( )
返回 数组

行为配置。

                public function behaviors()
{
    return [];
}

            
canGetProperty() 公共方法

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

返回一个指示属性是否可读的值。

如果属性可以读取,则

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

另请参阅 canSetProperty()

公共 布尔值 canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name 字符串

属性名称

$checkVars 布尔值

是否将成员变量视为属性

$checkBehaviors 布尔值

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

返回 布尔值

属性是否可以读取

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

公共 布尔值 canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name 字符串

属性名称

$checkVars 布尔值

是否将成员变量视为属性

$checkBehaviors 布尔值

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

返回 布尔值

属性是否可以写入

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

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

公共静态 字符串 className ( )
返回 字符串

此类的完全限定名称。

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

            
detachBehavior() 公共方法

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

从组件中分离行为。

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

公共 yii\base\Behavior|null detachBehavior ( $name )
$name 字符串

行为的名称。

返回 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()

从组件中分离所有行为。

公共 void detachBehaviors ( )

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

            
end() 公共静态方法

定义于: yii\base\Widget::end()

结束部件。

请注意,小部件的渲染结果直接回显。

另请参阅 begin()

公共静态 静态 end ( )
返回 yii\base\Widget

已结束的小部件实例。

抛出 yii\base\InvalidCallException

如果 begin()end() 调用没有正确嵌套

                public static function end()
{
    if (!empty(self::$stack)) {
        $widget = array_pop(self::$stack);
        $calledClass = get_called_class();
        if (Yii::$container->has($calledClass) && isset(Yii::$container->getDefinitions()[$calledClass]['class'])) {
            $calledClass = Yii::$container->getDefinitions()[$calledClass]['class'];
        }
        if (get_class($widget) === $calledClass) {
            /* @var $widget Widget */
            if ($widget->beforeRun()) {
                $result = $widget->run();
                $result = $widget->afterRun($result);
                echo $result;
            }
            return $widget;
        }
        throw new InvalidCallException('Expecting end() of ' . get_class($widget) . ', found ' . get_called_class());
    }
    throw new InvalidCallException('Unexpected ' . get_called_class() . '::end() call. A matching begin() is not found.');
}

            
ensureBehaviors() 公共方法

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

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

公共 void ensureBehaviors ( )

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

            
getBehavior() 公共方法

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

返回命名行为对象。

公共 yii\base\Behavior|null getBehavior ( $name )
$name 字符串

行为名称

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

            
getId() 公共方法

定义于: yii\base\Widget::getId()

返回部件的 ID。

public string|null getId ( $autoGenerate true )
$autoGenerate 布尔值

如果之前未设置 ID,是否生成一个 ID

返回 字符串|

部件的 ID。

                public function getId($autoGenerate = true)
{
    if ($autoGenerate && $this->_id === null) {
        $this->_id = static::$autoIdPrefix . static::$counter++;
    }
    return $this->_id;
}

            
getView() 公共方法

定义于: yii\base\Widget::getView()

返回可用于呈现视图或视图文件的视图对象。

render()renderFile() 方法将使用此视图对象来实现实际的视图渲染。如果没有设置,它将默认为“view”应用程序组件。

public yii\web\View getView ( )
返回 yii\web\View

可用于呈现视图或视图文件的视图对象。

                public function getView()
{
    if ($this->_view === null) {
        $this->_view = Yii::$app->getView();
    }
    return $this->_view;
}

            
getViewPath() 公共方法

定义于: yii\base\Widget::getViewPath()

返回包含此部件视图文件的目录。

默认实现返回包含 widget 类文件目录下的“views”子目录。

public string getViewPath ( )
返回 字符串

包含此部件视图文件的目录。

                public function getViewPath()
{
    $class = new ReflectionClass($this);
    return dirname($class->getFileName()) . DIRECTORY_SEPARATOR . 'views';
}

            
hasEventHandlers() 公共方法

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

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

public boolean hasEventHandlers ( $name )
$name 字符串

事件名称

返回 布尔值

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

                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 boolean hasMethod ( $name, $checkBehaviors true )
$name 字符串

属性名称

$checkBehaviors 布尔值

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

返回 布尔值

方法是否已定义

                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 boolean hasProperty ( $name, $checkVars true, $checkBehaviors true )
$name 字符串

属性名称

$checkVars 布尔值

是否将成员变量视为属性

$checkBehaviors 布尔值

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

返回 布尔值

属性是否已定义

                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()
{
    parent::init();
    ob_start();
    ob_implicit_flush(false);
}

            
off() 公共方法

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

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

此方法与 on() 相反。

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

另见 on().

public boolean off ( $name, $handler null )
$name 字符串

事件名称

$handler callable|null

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

返回 布尔值

如果找到处理程序并将其分离

                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().

public void on ( $name, $handler, $data null, $append true )
$name 字符串

事件名称

$handler 可调用

事件处理程序

$data 混合型

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

$append 布尔值

是否将新的事件处理程序附加到现有处理程序列表的末尾。如果为 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]);
    }
}

            
render() 公共方法

定义于: yii\base\Widget::render()

呈现视图。

要渲染的视图可以采用以下格式之一

  • 路径别名 (例如:"@app/views/site/index");
  • 应用程序内的绝对路径 (例如:"//site/index"): 视图名称以双斜杠开头。实际的视图文件将在应用程序的 视图路径 下查找。
  • 模块内的绝对路径 (例如:"/site/index"): 视图名称以单斜杠开头。实际的视图文件将在当前活动模块的 视图路径 下查找。
  • 相对路径 (例如:"index"): 实际的视图文件将在 $viewPath 下查找。

如果视图名称不包含文件扩展名,则将使用默认扩展名 ` .php `。

public string render ( $view, $params = [] )
$view 字符串

视图名称。

$params 数组

应该在视图中可用的一些参数(名称-值对)。

返回 字符串

渲染结果。

抛出 yii\base\InvalidArgumentException

如果视图文件不存在。

                public function render($view, $params = [])
{
    return $this->getView()->render($view, $params, $this);
}

            
renderFile() 公共方法

定义于: yii\base\Widget::renderFile()

呈现视图文件。

public string renderFile ( $file, $params = [] )
$file 字符串

要渲染的视图文件。这可以是文件路径或 路径别名

$params 数组

应该在视图中可用的一些参数(名称-值对)。

返回 字符串

渲染结果。

抛出 yii\base\InvalidArgumentException

如果视图文件不存在。

                public function renderFile($file, $params = [])
{
    return $this->getView()->renderFile($file, $params, $this);
}

            
run() 公共方法

结束记录块。

此方法停止输出缓冲并将渲染结果保存为视图中的命名块。

public void run ( )

                public function run()
{
    $block = ob_get_clean();
    if ($this->renderInPlace) {
        echo $block;
    }
    $this->view->blocks[$this->getId()] = $block;
}

            
setId() 公共方法

定义于: yii\base\Widget::setId()

设置部件的 ID。

public void setId ( $value )
$value 字符串

小部件的 ID。

                public function setId($value)
{
    $this->_id = $value;
}

            
setView() 公共方法

定义于: yii\base\Widget::setView()

设置此部件要使用的视图对象。

public void setView ( $view )
$view yii\base\View

可用于呈现视图或视图文件的视图对象。

                public function setView($view)
{
    $this->_view = $view;
}

            
trigger() 公共方法

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

触发事件。

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

public void trigger ( $name, yii\base\Event $event null )
$name 字符串

事件名称

$event yii\base\Event|null

事件实例。如果没有设置,将创建一个默认的 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);
}

            
widget() 公共静态方法

定义于: yii\base\Widget::widget()

创建部件实例并运行它。

此方法返回小部件渲染结果。

public static string widget ( $config = [] )
$config 数组

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

返回 字符串

小部件的渲染结果。

抛出 Throwable

                public static function widget($config = [])
{
    ob_start();
    ob_implicit_flush(false);
    try {
        /* @var $widget Widget */
        $config['class'] = get_called_class();
        $widget = Yii::createObject($config);
        $out = '';
        if ($widget->beforeRun()) {
            $result = $widget->run();
            $out = $widget->afterRun($result);
        }
    } catch (\Exception $e) {
        // close the output buffer opened above if it has not been closed already
        if (ob_get_level() > 0) {
            ob_end_clean();
        }
        throw $e;
    } catch (\Throwable $e) {
        // close the output buffer opened above if it has not been closed already
        if (ob_get_level() > 0) {
            ob_end_clean();
        }
        throw $e;
    }
    return ob_get_clean() . $out;
}