1 关注者

组件

组件是 Yii 应用程序的主要构建块。组件是 yii\base\Component 或其扩展类的实例。组件为其他类提供的三个主要功能是

单独或组合使用,这些功能使 Yii 类更易于定制和使用。例如,包含的 yii\jui\DatePicker(一个用户界面组件)可以在 视图 中使用以生成交互式日期选择器

use yii\jui\DatePicker;

echo DatePicker::widget([
    'language' => 'ru',
    'name'  => 'country',
    'clientOptions' => [
        'dateFormat' => 'yy-mm-dd',
    ],
]);

该小部件的属性易于写入,因为该类扩展了 yii\base\Component.

虽然组件功能非常强大,但它们比普通对象稍微重一些,因为支持 事件行为 功能需要额外的内存和 CPU 时间。如果你的组件不需要这两个功能,你可能考虑从 yii\base\BaseObject 而不是 yii\base\Component 扩展你的组件类。这样做会使你的组件与普通 PHP 对象一样高效,但会增加对 属性 的支持。

当你从 yii\base\Componentyii\base\BaseObject 扩展你的类时,建议你遵循以下约定

  • 如果你重写了构造函数,请将 $config 参数指定为构造函数的最后一个参数,然后将此参数传递给父构造函数。
  • 始终在重写的构造函数最后调用父构造函数。
  • 如果你重写了 yii\base\BaseObject::init() 方法,请确保在 init() 方法开头调用 init() 方法的父实现。

例如

<?php

namespace yii\components\MyClass;

use yii\base\BaseObject;

class MyClass extends BaseObject
{
    public $prop1;
    public $prop2;

    public function __construct($param1, $param2, $config = [])
    {
        // ... initialization before configuration is applied

        parent::__construct($config);
    }

    public function init()
    {
        parent::init();

        // ... initialization after configuration is applied
    }
}

遵循这些指南将使你的组件在创建时 可配置。例如

$component = new MyClass(1, 2, ['prop1' => 3, 'prop2' => 4]);
// alternatively
$component = \Yii::createObject([
    'class' => MyClass::class,
    'prop1' => 3,
    'prop2' => 4,
], [1, 2]);

信息:虽然调用 Yii::createObject() 的方法看起来更复杂,但它更强大,因为它是在 依赖注入容器 之上实现的。

yii\base\BaseObject 类强制执行以下对象生命周期

  1. 在构造函数中进行预初始化。你可以在此处设置默认属性值。
  2. 通过 $config 进行对象配置。配置可能会覆盖在构造函数中设置的默认值。
  3. init() 中进行后初始化。你可能需要重写此方法以对属性执行完整性检查和规范化。
  4. 对象方法调用。

前三步都在对象的构造函数中完成。这意味着,一旦你获得了类实例(即对象),该对象就已经被初始化为一个正确、可靠的状态。

发现错别字或你认为此页面需要改进?
在 github 上编辑它 !