1 关注者

类 yii\base\View

继承关系yii\base\View » yii\base\Component » yii\base\BaseObject
实现yii\base\Configurable, yii\base\DynamicContentAwareInterface
子类yii\web\View
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/base/View.php

View 代表 MVC 模式中的视图对象。

View 提供了一套用于渲染目的的方法(例如 render())。

有关 View 的更多详细信息和使用信息,请参阅 关于视图的指南文章

公有属性

隐藏继承的属性

属性 类型 描述 定义于
$behaviors yii\base\Behavior[] 附加到此组件的行为列表。 yii\base\Component
$blocks array 命名输出块的列表。 yii\base\View
$context yii\base\ViewContextInterface 调用 renderFile() 方法的上下文。 yii\base\View
$defaultExtension string 默认视图文件扩展名。 yii\base\View
$dynamicContents yii\base\DynamicContentAwareInterface[] 支持动态内容的类实例。 yii\base\View
$dynamicPlaceholders array 占位符列表。 yii\base\View
$params array 在视图模板之间共享的自定义参数。 yii\base\View
$renderers array|null 可用渲染器的列表,索引为其对应的支持的文件扩展名。 yii\base\View
$theme yii\base\Theme|array|string|null 主题对象或创建主题对象的配置。 yii\base\View
$viewFile string|boolean 当前正在渲染的视图文件。 yii\base\View

公有方法

隐藏继承的方法

方法 描述 定义于
__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
addDynamicPlaceholder() 为动态内容添加占位符。 yii\base\View
afterRender() 此方法在 renderFile() 渲染视图文件后立即调用。 yii\base\View
attachBehavior() 将行为附加到此组件。 yii\base\Component
attachBehaviors() 将行为列表附加到组件。 yii\base\Component
beforeRender() 此方法在 renderFile() 渲染视图文件前立即调用。 yii\base\View
beginBlock() 开始记录块。 yii\base\View
beginCache() 开始片段缓存。 yii\base\View
beginContent() 开始渲染要由指定视图装饰的内容。 yii\base\View
beginPage() 标记页面的开始。 yii\base\View
behaviors() 返回此组件应表现为的行为列表。 yii\base\Component
canGetProperty() 返回一个值,指示是否可以读取属性。 yii\base\Component
canSetProperty() 返回一个值,指示是否可以设置属性。 yii\base\Component
className() 返回此类的完全限定名称。 yii\base\BaseObject
detachBehavior() 从组件分离行为。 yii\base\Component
detachBehaviors() 从组件分离所有行为。 yii\base\Component
endBlock() 结束记录块。 yii\base\View
endCache() 结束片段缓存。 yii\base\View
endContent() 结束内容的渲染。 yii\base\View
endPage() 标记页面的结束。 yii\base\View
ensureBehaviors() 确保在 behaviors() 中声明的行为已附加到此组件。 yii\base\Component
evaluateDynamicContent() 评估给定的 PHP 语句。 yii\base\View
getBehavior() 返回命名的行为对象。 yii\base\Component
getBehaviors() 返回附加到此组件的所有行为。 yii\base\Component
getDynamicContents() 返回当前活动动态内容类实例的列表。 yii\base\View
getDynamicPlaceholders() 返回动态内容的占位符列表。此方法用于在内部实现内容缓存功能。 yii\base\View
getViewFile() yii\base\View
hasEventHandlers() 返回一个值,指示是否有任何处理程序附加到命名的事件。 yii\base\Component
hasMethod() 返回一个值,指示方法是否已定义。 yii\base\Component
hasProperty() 返回一个值,指示此组件是否定义了属性。 yii\base\Component
init() 初始化视图组件。 yii\base\View
off() 从此组件分离现有的事件处理程序。 yii\base\Component
on() 将事件处理程序附加到事件。 yii\base\Component
popDynamicContent() 从当前活动动态内容类实例列表中删除最后一个支持动态内容的类实例。 yii\base\View
pushDynamicContent() 将支持动态内容的类实例添加到当前活动动态内容类实例列表的末尾。 yii\base\View
render() 渲染视图。 yii\base\View
renderDynamic() 渲染由给定 PHP 语句返回的动态内容。 yii\base\View
renderFile() 渲染视图文件。 yii\base\View
renderPhpFile() 将视图文件渲染为 PHP 脚本。 yii\base\View
setDynamicPlaceholders() 设置动态内容的占位符列表。此方法用于在内部实现内容缓存功能。 yii\base\View
trigger() 触发事件。 yii\base\Component

受保护的方法

隐藏继承的方法

方法 描述 定义于
findViewFile() 根据给定的视图名称查找视图文件。 yii\base\View
getRequestedViewFile() yii\base\View

事件

隐藏继承的事件

事件 类型 描述 定义于
EVENT_AFTER_RENDER yii\base\ViewEvent renderFile() 渲染视图文件后触发的事件。 yii\base\View
EVENT_BEFORE_RENDER yii\base\ViewEvent renderFile() 渲染视图文件前触发的事件。 yii\base\View
EVENT_BEGIN_PAGE yii\base\Event beginPage() 触发的事件。 yii\base\View
EVENT_END_PAGE yii\base\Event endPage() 触发的事件。 yii\base\View

属性详情

隐藏继承的属性

$blocks 公有属性

命名输出块的列表。键是块名称,值是相应的块内容。您可以调用 beginBlock()endBlock() 来捕获视图的小片段。稍后可以通过此属性在其他地方访问它们。

public 数组 $blocks null
$context 公共属性

调用 renderFile() 方法的上下文。

$defaultExtension 公共属性

默认视图文件扩展名。如果视图文件名没有文件扩展名,则会附加此扩展名。

$dynamicContents 公共只读属性 (自 2.0.14 版本起可用)

支持动态内容的类实例。

$dynamicPlaceholders 公共属性

占位符列表。

public 数组 getDynamicPlaceholders ( )
public void setDynamicPlaceholders ( $placeholders )
$params 公共属性

在视图模板之间共享的自定义参数。

public 数组 $params = []
$renderers 公共属性

可用渲染器列表,以其对应的支持的文件扩展名作为索引。每个渲染器可以是一个视图渲染器对象,也可以是创建渲染器对象的配置。例如,以下配置启用了 Smarty 和 Twig 视图渲染器

[
    'tpl' => ['class' => 'yii\smarty\ViewRenderer'],
    'twig' => ['class' => 'yii\twig\ViewRenderer'],
]

如果给定视图文件没有可用的渲染器,则该视图文件将被视为普通的 PHP 文件,并通过 renderPhpFile() 渲染。

public 数组|null $renderers null
$theme 公共属性

主题对象或创建主题对象的配置。如果未设置,则表示未启用主题。

$viewFile 公共属性

当前正在渲染的视图文件。如果未渲染任何视图文件,则为 false。

方法详情

隐藏继承的方法

__call() 公共方法

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

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

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

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

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

方法名

$params array

方法参数

返回值 混合类型

方法的返回值

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

属性名

返回值 混合类型

属性值或行为属性的值

抛出异常 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 string

属性名称或事件名称

返回值 布尔型

命名属性是否已设置

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

属性值

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

            
addDynamicPlaceholder() 公共方法

为动态内容添加占位符。

此方法用于内部实现内容缓存功能。

public void addDynamicPlaceholder ( $placeholder, $statements )
$placeholder
$statements string

用于生成动态内容的PHP语句。

                public function addDynamicPlaceholder($placeholder, $statements)
{
    foreach ($this->cacheStack as $cache) {
        if ($cache instanceof DynamicContentAwareInterface) {
            $cache->addDynamicPlaceholder($placeholder, $statements);
        } else {
            // TODO: Remove in 2.1
            $cache->dynamicPlaceholders[$placeholder] = $statements;
        }
    }
    $this->dynamicPlaceholders[$placeholder] = $statements;
}

            
afterRender() 公共方法

此方法在 renderFile() 渲染视图文件后立即调用。

默认实现将触发EVENT_AFTER_RENDER事件。如果覆盖此方法,请确保首先调用父实现。

public void afterRender ( $viewFile, $params, &$output )
$viewFile string

正在渲染的视图文件。

$params array

传递给render()方法的参数数组。

$output string

视图文件的渲染结果。对该参数的更新将被传递回并由renderFile()返回。

                public function afterRender($viewFile, $params, &$output)
{
    if ($this->hasEventHandlers(self::EVENT_AFTER_RENDER)) {
        $event = new ViewEvent([
            'viewFile' => $viewFile,
            'params' => $params,
        ]);
        $event->output =& $output;
        $this->trigger(self::EVENT_AFTER_RENDER, $event);
    }
}

            
attachBehavior() 公共方法

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

将行为附加到此组件。

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

另请参阅 detachBehavior()

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

行为的名称。

$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 array

要附加到组件的行为列表

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

            
beforeRender() 公共方法

此方法在 renderFile() 渲染视图文件前立即调用。

默认实现将触发EVENT_BEFORE_RENDER事件。如果覆盖此方法,请确保首先调用父实现。

public 布尔型 beforeRender ( $viewFile, $params )
$viewFile string

要渲染的视图文件。

$params array

传递给render()方法的参数数组。

返回值 布尔型

是否继续渲染视图文件。

                public function beforeRender($viewFile, $params)
{
    $event = new ViewEvent([
        'viewFile' => $viewFile,
        'params' => $params,
    ]);
    $this->trigger(self::EVENT_BEFORE_RENDER, $event);
    return $event->isValid;
}

            
beginBlock() 公共方法

开始记录块。

此方法是开始yii\widgets\Block的快捷方式。

public yii\widgets\Block beginBlock ( $id, $renderInPlace false )
$id string

块ID。

$renderInPlace 布尔型

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

返回值 yii\widgets\Block

Block小部件实例

                public function beginBlock($id, $renderInPlace = false)
{
    return Block::begin([
        'id' => $id,
        'renderInPlace' => $renderInPlace,
        'view' => $this,
    ]);
}

            
beginCache() 公共方法

开始片段缓存。

此方法将显示缓存的内容(如果可用)。如果不可用,它将开始缓存,并期望endCache()调用来结束缓存并将内容保存到缓存中。片段缓存的典型用法如下所示:

if ($this->beginCache($id)) {
    // ...generate content here
    $this->endCache();
}
public 布尔型 beginCache ( $id, $properties = [] )
$id string

一个唯一ID,用于标识要缓存的片段。

$properties array

yii\widgets\FragmentCache的初始属性值

返回值 布尔型

是否应该生成缓存内容。如果缓存版本可用,则为false。

                public function beginCache($id, $properties = [])
{
    $properties['id'] = $id;
    $properties['view'] = $this;
    /* @var $cache FragmentCache */
    $cache = FragmentCache::begin($properties);
    if ($cache->getCachedContent() !== false) {
        $this->endCache();
        return false;
    }
    return true;
}

            
beginContent() 公共方法

开始渲染要由指定视图装饰的内容。

此方法可用于实现嵌套布局。例如,一个布局可以嵌入到另一个布局文件中,该布局文件指定为 '@app/views/layouts/base.php',如下所示

<?php $this->beginContent('@app/views/layouts/base.php'); ?>
//...layout content here...
<?php $this->endContent(); ?>

另请参阅 yii\widgets\ContentDecorator

public yii\widgets\ContentDecorator beginContent ( $viewFile, $params = [] )
$viewFile string

将用于修饰此小部件包含的内容的视图文件。这可以指定为视图文件路径或 路径别名

$params array

要提取并在装饰视图中使用的变量(名称 => 值)。

返回值 yii\widgets\ContentDecorator

ContentDecorator 小部件实例

                public function beginContent($viewFile, $params = [])
{
    return ContentDecorator::begin([
        'viewFile' => $viewFile,
        'params' => $params,
        'view' => $this,
    ]);
}

            
beginPage() 公共方法

标记页面的开始。

public void beginPage ( )

                public function beginPage()
{
    ob_start();
    ob_implicit_flush(false);
    $this->trigger(self::EVENT_BEGIN_PAGE);
}

            
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 布尔型

是否将成员变量视为属性

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

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

属性名

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

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

public static string className ( )
返回值 string

此类的完全限定名称。

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

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

            
endBlock() 公共方法

结束记录块。

public void endBlock ( )

                public function endBlock()
{
    Block::end();
}

            
endCache() 公共方法

结束片段缓存。

public void endCache ( )

                public function endCache()
{
    FragmentCache::end();
}

            
endContent() 公共方法

结束内容的渲染。

public void endContent ( )

                public function endContent()
{
    ContentDecorator::end();
}

            
endPage() 公共方法

标记页面的结束。

public void endPage ( )

                public function endPage()
{
    $this->trigger(self::EVENT_END_PAGE);
    ob_end_flush();
}

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

            
evaluateDynamicContent() 公共方法

评估给定的 PHP 语句。

此方法主要用于内部实现动态内容功能。

public mixed evaluateDynamicContent ( $statements )
$statements string

要评估的 PHP 语句。

返回值 混合类型

PHP 语句的返回值。

                public function evaluateDynamicContent($statements)
{
    return eval($statements);
}

            
findViewFile() 受保护的方法

根据给定的视图名称查找视图文件。

protected string findViewFile ( $view, $context null )
$view string

视图名称或视图文件的路径别名。请参考 render() 了解如何指定此参数。

$context object|null

要分配给视图的上下文,稍后可以通过视图中的 $context 访问。如果上下文实现了 yii\base\ViewContextInterface,它也可用于查找对应于相对视图名称的视图文件。

返回值 string

视图文件路径。请注意,该文件可能不存在。

抛出异常 yii\base\InvalidCallException

如果在没有活动上下文来确定相应视图文件的情况下给出了相对视图名称。

                protected function findViewFile($view, $context = null)
{
    if (strncmp($view, '@', 1) === 0) {
        // e.g. "@app/views/main"
        $file = Yii::getAlias($view);
    } elseif (strncmp($view, '//', 2) === 0) {
        // e.g. "//layouts/main"
        $file = Yii::$app->getViewPath() . DIRECTORY_SEPARATOR . ltrim($view, '/');
    } elseif (strncmp($view, '/', 1) === 0) {
        // e.g. "/site/index"
        if (Yii::$app->controller !== null) {
            $file = Yii::$app->controller->module->getViewPath() . DIRECTORY_SEPARATOR . ltrim($view, '/');
        } else {
            throw new InvalidCallException("Unable to locate view file for view '$view': no active controller.");
        }
    } elseif ($context instanceof ViewContextInterface) {
        $file = $context->getViewPath() . DIRECTORY_SEPARATOR . $view;
    } elseif (($currentViewFile = $this->getRequestedViewFile()) !== false) {
        $file = dirname($currentViewFile) . DIRECTORY_SEPARATOR . $view;
    } else {
        throw new InvalidCallException("Unable to resolve view file for view '$view': no active view context.");
    }
    if (pathinfo($file, PATHINFO_EXTENSION) !== '') {
        return $file;
    }
    $path = $file . '.' . $this->defaultExtension;
    if ($this->defaultExtension !== 'php' && !is_file($path)) {
        $path = $file . '.php';
    }
    return $path;
}

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

            
getDynamicContents() 公共方法 (自版本 2.0.14 起可用)

返回当前活动动态内容类实例的列表。

public yii\base\DynamicContentAwareInterface[] getDynamicContents ( )
返回值 yii\base\DynamicContentAwareInterface[]

支持动态内容的类实例。

                public function getDynamicContents()
{
    return $this->cacheStack;
}

            
getDynamicPlaceholders() 公共方法

返回动态内容的占位符列表。此方法用于在内部实现内容缓存功能。

public 数组 getDynamicPlaceholders ( )
返回值 array

占位符列表。

                public function getDynamicPlaceholders()
{
    return $this->dynamicPlaceholders;
}

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

protected string|boolean getRequestedViewFile ( )
返回值 string|boolean

当前正在渲染的请求视图。如果未渲染任何视图文件,则为 false。

                protected function getRequestedViewFile()
{
    return empty($this->_viewFiles) ? false : end($this->_viewFiles)['requested'];
}

            
getViewFile() 公共方法

public string|boolean getViewFile ( )
返回值 string|boolean

当前正在渲染的视图文件。如果未渲染任何视图文件,则为 false。

                public function getViewFile()
{
    return empty($this->_viewFiles) ? false : end($this->_viewFiles)['resolved'];
}

            
hasEventHandlers() 公共方法

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

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

public boolean hasEventHandlers ( $name )
$name string

事件名称

返回值 布尔型

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

                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 string

属性名

$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 string

属性名

$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();
    if (is_array($this->theme)) {
        if (!isset($this->theme['class'])) {
            $this->theme['class'] = 'yii\base\Theme';
        }
        $this->theme = Yii::createObject($this->theme);
    } elseif (is_string($this->theme)) {
        $this->theme = Yii::createObject($this->theme);
    }
}

            
off() 公共方法

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

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

此方法与 on() 相反。

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

另请参阅 on()

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

事件名称

$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 string

事件名称

$handler callable

事件处理程序

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

            
popDynamicContent() 公共方法 (自版本 2.0.14 起可用)

从当前活动动态内容类实例列表中删除最后一个支持动态内容的类实例。

public void popDynamicContent ( )

                public function popDynamicContent()
{
    array_pop($this->cacheStack);
}

            
pushDynamicContent() 公共方法 (自版本 2.0.14 起可用)

将支持动态内容的类实例添加到当前活动动态内容类实例列表的末尾。

public void pushDynamicContent ( yii\base\DynamicContentAwareInterface $instance )
$instance yii\base\DynamicContentAwareInterface

支持动态内容的类实例。

                public function pushDynamicContent(DynamicContentAwareInterface $instance)
{
    $this->cacheStack[] = $instance;
}

            
render() 公共方法

渲染视图。

要渲染的视图可以以下列格式之一指定:

  • 路径别名(例如“@app/views/site/index”);
  • 应用程序中的绝对路径(例如“//site/index”):视图名称以双斜杠开头。实际的视图文件将在应用程序的 视图路径 下查找。
  • 当前模块中的绝对路径(例如“/site/index”):视图名称以单个斜杠开头。实际的视图文件将在 当前模块视图路径 下查找。
  • 相对视图(例如“index”):视图名称不以@/开头。相应的视图文件将在视图$context视图路径 下查找。如果未给出$context,则将在包含当前正在渲染的视图的目录下查找(即,当在另一个视图中渲染视图时发生这种情况)。

另请参阅 renderFile()

public string render ( $view, $params = [], $context null )
$view string

视图名称。

$params array

将被提取并在视图文件中可用(名称-值对)的参数。

$context object|null

要分配给视图的上下文,稍后可以通过视图中的 $context 访问。如果上下文实现了 yii\base\ViewContextInterface,它也可用于查找对应于相对视图名称的视图文件。

返回值 string

渲染结果

抛出异常 yii\base\ViewNotFoundException

如果视图文件不存在。

抛出异常 yii\base\InvalidCallException

如果无法解析视图。

                public function render($view, $params = [], $context = null)
{
    $viewFile = $this->findViewFile($view, $context);
    return $this->renderFile($viewFile, $params, $context);
}

            
renderDynamic() 公共方法

渲染由给定 PHP 语句返回的动态内容。

此方法主要与内容缓存(片段缓存和页面缓存)一起使用,当内容的某些部分(称为动态内容)不应被缓存时。动态内容必须由一些 PHP 语句返回。

另请参阅 https://github.com/yiisoft/yii2/issues/17673

public string renderDynamic ( $statements )
$statements string

用于生成动态内容的PHP语句。

返回值 string

动态内容的占位符,或者如果没有当前活动的缓存,则为动态内容。

请注意,大多数间接修改布局的方法(例如 registerJS() 或 registerJSFile())不适用于动态渲染。

                public function renderDynamic($statements)
{
    if (!empty($this->cacheStack)) {
        $n = count($this->dynamicPlaceholders);
        $placeholder = "<![CDATA[YII-DYNAMIC-$n]]>";
        $this->addDynamicPlaceholder($placeholder, $statements);
        return $placeholder;
    }
    return $this->evaluateDynamicContent($statements);
}

            
renderFile() 公共方法

渲染视图文件。

如果启用了 $theme(不为 null),则只要视图文件可用,它就会尝试渲染该视图文件的主题版本。

该方法将调用 yii\helpers\FileHelper::localize() 来本地化视图文件。

如果启用了 renderer(不为 null),则该方法将使用它来渲染视图文件。否则,它将简单地包含视图文件作为普通 PHP 文件,捕获其输出并将其作为字符串返回。

public string renderFile ( $viewFile, $params = [], $context null )
$viewFile string

视图文件。这可以是绝对文件路径或其别名。

$params array

将被提取并在视图文件中可用(名称-值对)的参数。

$context object|null

视图应用于渲染视图的上下文。如果为 null,则将使用现有的 $context

返回值 string

渲染结果

抛出异常 yii\base\ViewNotFoundException

如果视图文件不存在

                public function renderFile($viewFile, $params = [], $context = null)
{
    $viewFile = $requestedFile = Yii::getAlias($viewFile);
    if ($this->theme !== null) {
        $viewFile = $this->theme->applyTo($viewFile);
    }
    if (is_file($viewFile)) {
        $viewFile = FileHelper::localize($viewFile);
    } else {
        throw new ViewNotFoundException("The view file does not exist: $viewFile");
    }
    $oldContext = $this->context;
    if ($context !== null) {
        $this->context = $context;
    }
    $output = '';
    $this->_viewFiles[] = [
        'resolved' => $viewFile,
        'requested' => $requestedFile
    ];
    if ($this->beforeRender($viewFile, $params)) {
        Yii::debug("Rendering view file: $viewFile", __METHOD__);
        $ext = pathinfo($viewFile, PATHINFO_EXTENSION);
        if (isset($this->renderers[$ext])) {
            if (is_array($this->renderers[$ext]) || is_string($this->renderers[$ext])) {
                $this->renderers[$ext] = Yii::createObject($this->renderers[$ext]);
            }
            /* @var $renderer ViewRenderer */
            $renderer = $this->renderers[$ext];
            $output = $renderer->render($this, $viewFile, $params);
        } else {
            $output = $this->renderPhpFile($viewFile, $params);
        }
        $this->afterRender($viewFile, $params, $output);
    }
    array_pop($this->_viewFiles);
    $this->context = $oldContext;
    return $output;
}

            
renderPhpFile() 公共方法

将视图文件渲染为 PHP 脚本。

此方法将视图文件视为 PHP 脚本并包含该文件。它提取给定的参数并在视图文件中提供它们。该方法捕获包含的视图文件的输出并将其作为字符串返回。

此方法主要应由视图渲染器或 renderFile() 调用。

public string renderPhpFile ( $_file_, $_params_ = [] )
$_file_ string

视图文件。

$_params_ array

将被提取并在视图文件中可用(名称-值对)的参数。

返回值 string

渲染结果

抛出异常 Throwable

                public function renderPhpFile($_file_, $_params_ = [])
{
    $_obInitialLevel_ = ob_get_level();
    ob_start();
    ob_implicit_flush(false);
    extract($_params_, EXTR_OVERWRITE);
    try {
        require $_file_;
        return ob_get_clean();
    } catch (\Exception $e) {
        while (ob_get_level() > $_obInitialLevel_) {
            if (!@ob_end_clean()) {
                ob_clean();
            }
        }
        throw $e;
    } catch (\Throwable $e) {
        while (ob_get_level() > $_obInitialLevel_) {
            if (!@ob_end_clean()) {
                ob_clean();
            }
        }
        throw $e;
    }
}

            
setDynamicPlaceholders() 公共方法

设置动态内容的占位符列表。此方法用于在内部实现内容缓存功能。

public void setDynamicPlaceholders ( $placeholders )
$placeholders array

占位符列表。

                public function setDynamicPlaceholders($placeholders)
{
    $this->dynamicPlaceholders = $placeholders;
}

            
trigger() 公共方法

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

触发事件。

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

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

事件名称

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

            

事件详情

隐藏继承的属性

EVENT_AFTER_RENDER 类型为 yii\base\ViewEvent 的事件

renderFile() 渲染视图文件后触发的事件。

EVENT_BEFORE_RENDER 类型为 yii\base\ViewEvent 的事件

renderFile() 渲染视图文件前触发的事件。

EVENT_BEGIN_PAGE 类型为 yii\base\Event 的事件

beginPage() 触发的事件。

EVENT_END_PAGE 类型为 yii\base\Event 的事件

endPage() 触发的事件。