# 是 [view]() 中使用的可重用单元,使用面向对象的方法来创建复杂且可配置的用户界面单元。 例如,日期选择器小部件可以生成一个精美的日期选择器,允许用户选择日期,只需要在视图中插入以下代码:~~~~~~Yii 提供了许多优秀的小部件,例如 yii\ \, [yii\\Menu|menu]],[ UI ](),[ ](). 接下来我们就来介绍一下的基础知识。 如果您想了解某个,请参阅相应的类API文档。 ## 使用 基本都是在[views]()中使用,在view中可以调用yii\base\::()方法来使用。 该方法使用 []() 数组初始化小部件并返回小部件的渲染结果。 例如,以下代码插入一个日期选择器小部件,该小部件配置为使用俄语,输入框的内容是`$model`的`属性值。 ~~~~~~ 一些小部件可以在 yii\base\::begin() 和 yii\base\::end() 调用中使用数据内容。 有些可以使用 of 的块,例如,下面的代码使用 yii\\ 小部件生成登录表单,该小部件将生成开始标签和结束标签,中间的任何代码也将被渲染。 ~~~
~~~ 注意,与调用 yii\base\::() 返回渲染结果不同,调用 yii\base\::begin() 方法返回一个可以组成 内容的 实例。 ## 创建小部件 ## 继承 yii\base\ 类并重写 yii\base\::init() 和/或 yii\base\::run() 方法来创建小部件。 通常,“init()”方法处理小部件属性,“run()”方法包含小部件生成渲染结果的代码。 渲染结果可以直接“”输出,也可以在`run()`方法中以字符串形式返回。 在下面的代码中``编码并显示分配给``'的值,如果未分配该属性,则默认显示“Hello World”。 ~~~ app\;使用 yii\base\;使用 yii\\Html;class { $; init(){::init();if ($this-> === null) {$this-> = 'Hello World';}} run(){ Html::($this->);}} ~~~ 要使用这个小部件,只需在视图中使用以下代码:~~~~~~ 这是另一个可以在`begin()`和`end()`调用中使用的``,HTML对内容进行编码然后显示它。
~~~ app\;使用 yii\base\;使用 yii\\Html;class { init(){::init();();} run(){$ = (); html::($); }}~~~如上所示,PHP 输出缓冲是在 `init()` 处启动的,所有在 `init()` 和 `run()` 方法之间的输出内容都会被捕获,并在 `run()` 中处理和处理返回。 > 补充:当调用 yii\base\::begin() 时,将创建一个新的 实例,并在构造结束时调用 `init()` 方法,并在 `end 时调用 `run()` ()``方法并输出返回结果。 下面的代码展示了如何使用这个``:~~~ 那可能是~~~ 有时小部件需要渲染很多内容,更好的方法是将内容放入 [view]() 文件中,然后调用 yii 的 \base\::() 方法渲染视图文件,例如: ~~~ run(){ $this->('hello');}~~~ 小部件的视图文件存储在默认为`/views`目录,``代表类文件所在目录。
如果上面的示例小部件类文件位于`@app/`下,则将渲染`@app//views/hello.php`视图文件。 您可以重写 yii\base\::() 方法来自定义视图文件所在的路径。 ## 最佳实践小部件是一种重用视图代码的面向对象的方法。 创建小部件时,您仍然需要遵循 MVC 模式。 通常,逻辑代码在类中,显示内容在[view]()中。 应该被设计为独立的,这意味着当一个 被使用时,它可以被丢弃而无需额外的处理。 但是当需要外部资源,如CSS、图片等时,这就很棘手了。幸运的是,Yii提供了[资源包]()来解决这个问题。 当一个小部件只包含视图代码时,它与 [view]() 非常相似,事实上,这种情况下唯一的区别是小部件是一个可重用的类,而视图只是应用程序中使用的普通 PHP 脚本。