1 关注者

类 yii\widgets\Breadcrumbs

继承yii\widgets\Breadcrumbs » 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/Breadcrumbs.php

Breadcrumbs 显示一个链接列表,指示当前页面在整个站点层次结构中的位置。

例如,像 “首页 / 样例帖子 / 编辑” 这样的面包屑意味着用户正在查看 “样例帖子” 的编辑页面。他可以点击 “样例帖子” 查看该页面,或者点击 “首页” 返回首页。

要使用 Breadcrumbs,你需要配置它的 $links 属性,它指定要显示的链接。例如:

// $this is the view object currently being used
echo Breadcrumbs::widget([
    'itemTemplate' => "<li><i>{link}</i></li>\n", // template for all links
    'links' => [
        [
            'label' => 'Post Category',
            'url' => ['post-category/view', 'id' => 10],
            'template' => "<li><b>{link}</b></li>\n", // template for this link only
        ],
        ['label' => 'Sample Post', 'url' => ['post/edit', 'id' => 1]],
        'Edit',
    ],
]);

因为面包屑通常出现在网站的几乎每个页面,你可能想要考虑将它放在布局视图中。你可以使用视图参数(例如 $this->params['breadcrumbs'])来配置不同视图中的链接。在布局视图中,你将此视图参数分配给 $links 属性,如下所示:

// $this is the view object currently being used
echo Breadcrumbs::widget([
    'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
]);

yii\web\View

可以用于渲染视图或视图文件的视图对象。

$viewPath 描述 定义
string 包含此部件视图文件的目录。 附加到此组件的行为列表。
公共方法 隐藏继承的方法 附加到此组件的行为列表。
方法 __call() 调用不是类方法的命名方法。
__clone() 此方法在通过克隆现有对象创建对象后调用。 附加到此组件的行为列表。
__construct() 构造函数。 附加到此组件的行为列表。
yii\base\BaseObject __get() 附加到此组件的行为列表。
返回组件属性的值。 __isset() 附加到此组件的行为列表。
检查属性是否已设置,即定义且不为空。 __set() 自动生成的部件 ID 的前缀。
设置组件属性的值。 __unset() 附加到此组件的行为列表。
将组件属性设置为 null。 afterRun() 附加到此组件的行为列表。
此方法在部件执行后立即调用。 attachBehavior() 自动生成的部件 ID 的前缀。
将行为附加到此组件。 attachBehaviors() 自动生成的部件 ID 的前缀。
将行为列表附加到组件。 beforeRun() 附加到此组件的行为列表。
此方法在部件执行之前立即调用。 begin() 附加到此组件的行为列表。
启动部件。 behaviors() 附加到此组件的行为列表。
返回此组件应表现为的行为列表。 canGetProperty() 调用不是类方法的命名方法。
返回一个值,指示是否可以读取属性。 canSetProperty() 附加到此组件的行为列表。
返回一个值,指示是否可以设置属性。 className() 附加到此组件的行为列表。
返回此类的完全限定名称。 detachBehavior() 自动生成的部件 ID 的前缀。
从组件中分离行为。 detachBehaviors() 附加到此组件的行为列表。
从组件中分离所有行为。 end() 附加到此组件的行为列表。
结束部件。 ensureBehaviors() 附加到此组件的行为列表。
确保 behaviors() 中声明的行为已附加到此组件。 getBehavior() 自动生成的部件 ID 的前缀。
返回命名的行为对象。 getBehaviors() 自动生成的部件 ID 的前缀。
返回附加到此组件的所有行为。 getId() 自动生成的部件 ID 的前缀。
返回部件的 ID。 getView() 附加到此组件的行为列表。
返回可以用于渲染视图或视图文件的视图对象。 getViewPath() 附加到此组件的行为列表。
返回包含此部件视图文件的目录。 hasEventHandlers() 附加到此组件的行为列表。
返回一个值,指示是否有任何处理程序附加到命名的事件。 hasMethod() 自动生成的部件 ID 的前缀。
返回一个值,指示方法是否已定义。 hasProperty() 附加到此组件的行为列表。
返回一个值,指示此组件是否定义了属性。 init() 附加到此组件的行为列表。
初始化对象。 off() 自动生成的部件 ID 的前缀。
从此组件中分离现有的事件处理程序。 on() 自动生成的部件 ID 的前缀。
将事件处理程序附加到事件。 render() yii\widgets\Breadcrumbs
渲染视图。 renderFile() 自动生成的部件 ID 的前缀。
渲染视图文件。 run() 自动生成的部件 ID 的前缀。
渲染部件。 setId() 附加到此组件的行为列表。
设置部件的 ID。 setView() 自动生成的部件 ID 的前缀。

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

可以用于渲染视图或视图文件的视图对象。

$viewPath 描述 定义
trigger() 触发事件。 yii\widgets\Breadcrumbs

EVENT_BEFORE_RUN

隐藏继承的属性

在执行部件之前立即引发的事件。 (自版本 2.0.11 起可用)

EVENT_INIT

public string $activeItemTemplate "<li class=\"active\">{link}</li>\n"
$encodeLabels 公共属性

boolean

public boolean $encodeLabels true
$itemTemplate 公共属性

用于渲染面包屑中每个非活动项目的模板。标记 {link} 将被替换为每个非活动项目的实际 HTML 链接。

public string $itemTemplate "<li>{link}</li>\n"
$options 公共属性

要出现在面包屑中的链接列表。

另请参见 yii\helpers\Html::renderTagAttributes() 了解属性如何呈现的详细信息。

public array $options = [
    
'class' => 'breadcrumb',
]
$tag 公共属性

array

public string $tag 'ul'

方法详情

可以用于渲染视图或视图文件的视图对象。

__call() 公共方法

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

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

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

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

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

方法名称

$params 用于渲染面包屑中每个非活动项目的模板。

方法参数

return mixed

方法返回值

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

__call()

默认实现执行两件事

  • 使用给定的配置 $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 string

属性名称

return mixed

属性值或行为属性的值

throws yii\base\UnknownPropertyException

如果未定义属性

throws 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 boolean __isset ( $name )
$name string

属性名或事件名

return $encodeLabels

指定属性是否被设置

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

__get()

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

  • 由 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

如果属性是只读的。

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

__isset()

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

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

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

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

public void __unset ( $name )
$name string

属性名称

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

__set()

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

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

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

小部件返回结果。

return mixed

已处理的小部件结果。

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

__unset()

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

另请参阅 detachBehavior().

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

行为的名称。

$behavior string|array|yii\base\Behavior

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

return $behaviors

行为对象

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

            
attachBehaviors() 公共方法

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

afterRun()

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

另请参阅 attachBehavior().

public void attachBehaviors ( $behaviors )
yii\base\Widget 用于渲染面包屑中每个非活动项目的模板。

要附加到组件的行为列表

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

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

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

attachBehavior()

此方法将触发 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 boolean beforeRun ( )
return $encodeLabels

小部件是否应该继续执行。

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

            
begin() 公共静态方法

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

attachBehaviors()

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

另请参阅 end().

public static static begin ( $config = [] )
$config 用于渲染面包屑中每个非活动项目的模板。

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

return 自动生成的部件 ID 的前缀。

新创建的小部件实例

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

beforeRun()

子类可以覆盖此方法以指定他们希望表现出来的行为。

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

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

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

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

public array behaviors ( )
return 用于渲染面包屑中每个非活动项目的模板。

行为配置。

                public function behaviors()
{
    return [];
}

            
canGetProperty() 公共方法

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

begin()

如果属性可以读取,则

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

另请参阅 canSetProperty().

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

属性名称

$checkVars $encodeLabels

是否将成员变量视为属性

$checkBehaviors $encodeLabels

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

return $encodeLabels

该属性是否可读

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

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

behaviors()

属性可以写入,如果

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

另请参阅 canGetProperty().

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

属性名称

$checkVars $encodeLabels

是否将成员变量视为属性

$checkBehaviors $encodeLabels

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

return $encodeLabels

该属性是否可写

                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() public static method
自 2.0.14 起弃用。在 PHP >= 5.5 上,请改用 ::class

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

canGetProperty()

public static string className ( )
return string

此类的完全限定名称。

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

            
detachBehavior() public method

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

canSetProperty()

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

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

行为的名称。

return 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() public method

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

className()

public void detachBehaviors ( )

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

            
end() public static method

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

detachBehavior()

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

另请参阅 begin().

public static static end ( )
return 自动生成的部件 ID 的前缀。

结束的小部件实例。

throws 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() public method

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

detachBehaviors()

public void ensureBehaviors ( )

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

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

行为名称

return yii\base\Behavior|null

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

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

            
getBehaviors() public method

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

ensureBehaviors()

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

附加到此组件的行为列表

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

            
getId() public method

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

getBehavior()

public string|null getId ( $autoGenerate true )
$autoGenerate $encodeLabels

如果以前没有设置,是否生成 ID

return $id

string|null

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

            
getView() public method

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

getBehaviors()

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

public yii\web\View getView ( )
return $tag

string

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

            
getViewPath() public method

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

getId()

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

public string getViewPath ( )
return string

$view

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

            
hasEventHandlers() public method
public boolean hasEventHandlers ( $name )
$name string

事件名称

return $encodeLabels

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

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

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

getViewPath()

方法定义如下:

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

属性名称

$checkBehaviors $encodeLabels

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

return $encodeLabels

方法是否已定义

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

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

hasEventHandlers()

属性定义如下:

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

另请参阅

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

属性名称

$checkVars $encodeLabels

是否将成员变量视为属性

$checkBehaviors $encodeLabels

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

return $encodeLabels

属性是否已定义

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

            
init() public method

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

hasMethod()

此方法在构造函数结束时调用。默认实现将触发 EVENT_INIT 事件。

public void init ( )

                public function init()
{
    parent::init();
    $this->trigger(self::EVENT_INIT);
}

            
off() public method

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

hasProperty()

此方法与 on() 相反。

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

另请参阅 on().

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

事件名称

$handler callable|null

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

return $encodeLabels

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

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

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

init()

事件处理程序必须是有效的 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 mixed

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

$append $encodeLabels

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

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

off()

要渲染的视图可以使用以下格式之一指定

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

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

public string render ( $view, $params = [] )
面包屑容器标签的 HTML 属性。 string

视图名称。

$params 用于渲染面包屑中每个非活动项目的模板。

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

return string

渲染结果。

throws yii\base\InvalidArgumentException

如果视图文件不存在。

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

            
renderFile() public method

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

on()

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

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

$params 用于渲染面包屑中每个非活动项目的模板。

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

return string

渲染结果。

throws yii\base\InvalidArgumentException

如果视图文件不存在。

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

            
renderItem() protected method

触发事件。

protected string renderItem ( $link, $template )
$link 用于渲染面包屑中每个非活动项目的模板。

要渲染的链接。它必须包含“label”元素。“url”元素是可选的。

$template string

用于渲染链接的模板。令牌“{link}”将被链接替换。

return string

渲染结果

throws yii\base\InvalidConfigException

如果 $link 没有“label”元素。

                protected function renderItem($link, $template)
{
    $encodeLabel = ArrayHelper::remove($link, 'encode', $this->encodeLabels);
    if (array_key_exists('label', $link)) {
        $label = $encodeLabel ? Html::encode($link['label']) : $link['label'];
    } else {
        throw new InvalidConfigException('The "label" element is required for each link.');
    }
    if (isset($link['template'])) {
        $template = $link['template'];
    }
    if (isset($link['url'])) {
        $options = $link;
        unset($options['template'], $options['label'], $options['url']);
        $link = Html::a($label, $link['url'], $options);
    } else {
        $link = $label;
    }
    return strtr($template, ['{link}' => $link]);
}

            
run() public method

render()

public void run ( )

                public function run()
{
    if (empty($this->links)) {
        return;
    }
    $links = [];
    if ($this->homeLink === null) {
        $links[] = $this->renderItem([
            'label' => Yii::t('yii', 'Home'),
            'url' => Yii::$app->homeUrl,
        ], $this->itemTemplate);
    } elseif ($this->homeLink !== false) {
        $links[] = $this->renderItem($this->homeLink, $this->itemTemplate);
    }
    foreach ($this->links as $link) {
        if (!is_array($link)) {
            $link = ['label' => $link];
        }
        $links[] = $this->renderItem($link, isset($link['url']) ? $this->itemTemplate : $this->activeItemTemplate);
    }
    echo Html::tag($this->tag, implode('', $links), $this->options);
}

            
setId() public method

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

renderFile()

public void setId ( $value )
$value string

小部件的 ID。

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

            
setView() public method

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

run()

public void setView ( $view )
面包屑容器标签的 HTML 属性。 yii\base\View

string

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

            
trigger() 公共方法

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

setId()

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

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

            
widget() 公共静态方法

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

setView()

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

public static string widget ( $config = [] )
$config 用于渲染面包屑中每个非活动项目的模板。

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

return string

小部件的渲染结果。

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