推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

YII 小部件(Widgets)

   2023-07-05 网络整理佚名1700
核心提示:小部件是在视图中使用的可重用单元,使用面向对象方式创建复杂和可配置用户界面单元。方法返回一个可组建小部件内容的小部件实例。创建小部件可以根据需要以两种不同方式创建小部件。方法包含小部件生成渲染结果的代码。使用这个小部件只需在视图中简单使用如下代码:代表小部件类文件所在的目录。小部件是面向对象方式来重用视图代码。创建小部件时仍需要遵循MVC模式,通常逻辑代码在小部件类,展示内容在视图中。

小零件

部件视图中使用的可重用单元,使用面向对象的方法来创建复杂且可配置的用户界面单元。 例如,日期选择器小部件可以生成一个精美的日期选择器,允许用户选择日期,您所需要做的就是在视图中插入以下代码


'name' => 'date']) ?>

Yii 提供了很多优秀的 ,比如 [[yii\\| 表单]],[[yii\\Menu|menu]],UI,. 接下来介绍一下的基础知识。 如果您想了解某个,请参阅相应的类API文档。

使用小部件

基本上都是在视图中使用的,在视图中可以调用 [[yii\base\::()]] 方法来使用 。 该方法使用配置数组初始化小部件并返回小部件的渲染结果。 例如,以下代码插入一个日期选择器小部件,该小部件配置为使用俄语,输入框的内容是 $model 的属性值。


'model' => $model,
    'attribute' => 'from_date',
    'language' => 'ru',
    'dateFormat' => 'php:Y-m-d',
]) ?>

一些小部件可以在 [[yii\base\::begin()]] 和 [[yii\base\::end()]] 调用中使用数据内容。 例如,以下代码使用 [[yii\\]] 小部件生成登录表单。 小部件将分别在执行 begin() 和 end() 时生成开始标记和结束标记,并且其间的任何代码也将被渲染。


'id' => 'login-form']); ?>
    field($model, 'username') ?>
    field($model, 'password')->passwordInput() ?>
    
        'Login') ?>
    

请注意,调用 [[yii\base\::begin()]] 方法会返回一个可用于组成小部件内容的小部件实例,这与调用 [[yii\base\::()]] 返回渲染结果不同。

注意:当调用 [[yii\base\::end()]] 时,一些小部件将使用输出缓冲区来调整包含的内容。 因此,当调用 [[yii\base\::begin()]] 和 [[yii\base\::end()]] 时,最好在同一个视图文件中。 不遵守此规则可能会导致意外的输出。

配置全局默认值

可以通过 DI 容器配置小部件的全局默认值:

\Yii::$container->set('yii\widgets\linkPager', ['maxButtonCount' => 5]);

详情请参阅。

创建小部件

根据您的需要,可以通过两种不同的方式创建小部件。

1:使用()方法

继承 [[yii\base\]] 类并重写 [[yii\base\::init()]] 和/或 [[yii\base\::run()]] 方法来创建小部件。 通常,init() 方法处理小部件属性,run() 方法包含小部件生成渲染结果的代码。 渲染结果可以直接“打印”,也可以通过 run() 方法作为字符串返回。

编码并显示分配给以下代码中的属性的值。 如果未指定该属性,则默认显示“Hello World”。

namespace app\components;
use yii\base\Widget;
use yii\helpers\Html;
class HelloWidget extends Widget
{
    public $message;
    public function init()
    {
        parent::init();
        if ($this->message === null) {
            $this->message = 'Hello World';
        }
    }
    public function run()
    {
        return Html::encode($this->message);
    }
}

要使用此小部件,只需在视图中使用以下代码:


'message' => 'Good morning']) ?>

有时小部件需要渲染很多内容,虽然可以将内容嵌入到 run() 方法中,但更好的方法是将内容放入视图文件中,然后调用 [[yii\base\::( )]] 方法来渲染视图文件,例如:

public function run()
{
    return $this->render('hello');
}

2:使用begin()和end()方法

这与上面的类似,但有细微差别。 这是另一种可以在 begin() 和 end() 调用中使用的方法,HTML 对内容进行编码然后显示它。

namespace app\components;
use yii\base\Widget;
use yii\helpers\Html;
class HelloWidget extends Widget
{
    public function init()
    {
        parent::init();
        ob_start();
    }
    public function run()
    {
        $content = ob_get_clean();
        return Html::encode($content);
    }
}

如上所示,PHP 输出缓冲在 init() 中启动,init() 和 run() 方法之间的所有输出内容都将在 run() 中获取、处理和返回。

信息:当你调用 [[yii\base\::begin()]] 时,会创建一个新的小部件实例,并在构造结束时调用 init() 方法,并在 end() 处调用 run() 方法并输出返回结果。

以下代码展示了如何使用它:



    sample content that may contain one or more HTML 
tags

奥比格,.g。

默认情况下,小部件的视图应存储在 /views 目录中,该目录表示小部件的类文件所在的目录。 上面的示例呈现 @app//views/hello.php 视图文件,前提是小部件类文件位于 @app/ 下。 你可以重写 [[yii\base\::()]] 方法来自定义视图文件所在的路径。

最佳实践

小部件是一种重用视图代码的面向对象的方式。

创建小部件时,您仍然需要遵循 MVC 模式。 通常,逻辑代码位于类中,内容显示在视图中。

应该被设计为独立的,这意味着当一个 被使用时,它可以被丢弃而无需额外的处理。 但当需要外部资源如CSS、图像等时,就会很棘手。 幸运的是,Yii 提供了资源包来解决这个问题。

当小部件仅包含视图代码时,它与视图非常相似,事实上,这种情况下唯一的区别是小部件是可重用的类,而视图只是应用程序中使用的普通 PHP 脚本。

 
标签: 部件 视图 渲染 调用 代码
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON