Yii框架2.0的小部件

小部件是视图里的可重用单元。

小部件是在视图中使用的,但是可能需要使用控制器传给他的模型,比如在渲染表单的时候。比如一般的时间拾取器就可以直接砸视图里加入如下代码就可以:

<?php
use yii\jui\DatePicker;
?>
<?= DatePicker::widget([‘name‘ => ‘date‘]) ?>

如果用到model 就大致是这样的:

<?php
use yii\jui\DatePicker;
?>
<?= DatePicker::widget([
    ‘model‘ => $model,
    ‘attribute‘ => ‘from_date‘,
    ‘language‘ => ‘ru‘,
    ‘clientOptions‘ => [
        ‘dateFormat‘ => ‘yy-mm-dd‘,
    ],
]) ?>

一些小部件可在[[yii\base\Widget::begin()]] 和 [[yii\base\Widget::end()]] 调用中使用数据内容。比如ActiveForm 小组件就是这样使用的。

<?php
use yii\widgets\ActiveForm;
use yii\helpers\Html;
?>

<?php $form = ActiveForm::begin([‘id‘ => ‘login-form‘]); ?>

    <?= $form->field($model, ‘username‘) ?>

    <?= $form->field($model, ‘password‘)->passwordInput() ?>

    <div class="form-group">
        <?= Html::submitButton(‘Login‘) ?>
    </div>

<?php ActiveForm::end(); ?>

和调用 [[yii\base\Widget::widget()]] 返回渲染结果不同, 调用 [[yii\base\Widget::begin()]] 方法返回一个可组建小部件内容的小部件实例。

创建小部件:

继承 yii\base\Widget 并实现 init 和 run方法就可以创建一个小部件。

1、创建一个像上面提到的时间选择器那样可以直接输出的小部件:

namespace app\components;

use yii\base\Widget;
use yii\helpers\Html;

class HelloWidget extends Widget {
    public $message;

    public function init() {
        parent::init();
        if(null == $this->message) {
            $this->message = ‘Hello World‘;
        }
    }

    public function run() {
        return Html::encode($this->message);
    }
}

在模板中使用的代码是:

<?php
use app\components\HelloWidget;
?>
<?= HelloWidget::widget([‘message‘=>‘This is a HelloWidget!‘])?>

2、如果要创建一个用 begin 和 end 中使用的小部件:

amespace app\components;

use yii\base\Widget;
use yii\helpers\Html;

class HelloWidget extends Widget {
    public $message;

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

    public function field() {
        return Html::encode(‘这个是实例调用的方法!‘);
    }

    public function run() {
        $this->message = ob_get_clean();
        return Html::encode($this->message);
    }
}

模板里调用是这样的:

<?php
use yii\helpers\Html;
use app\components\HelloWidget;
?>

<?php echo Html::encode($message);?><br />
<?php $hello = HelloWidget::begin();?>
    这次使用的事begin 和 end方法。
    <?= $hello->field();?>
<?php HelloWidget::end();?>

有时小部件需要渲染很多内容,一种更好的办法是将内容放入一个视图文件, 然后调用[[yii\base\Widget::render()]]方法渲染该视图文件,小部件的视图文件默认存储在WidgetPath/views目录,WidgetPath代表小部件类文件所在的目录。 假如上述示例小部件类文件在@app/components下,会渲染@app/components/views/hello.php视图文件。 You may override 可以覆盖[[yii\base\Widget::getViewPath()]]方法自定义视图文件所在路径。

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

最后提点应该注意的:

  • 创建小部件时仍需要遵循MVC模式,通常逻辑代码在小部件类,展示内容在视图中。
  • 小部件设计时应是独立的,也就是说使用一个小部件时候,可以直接丢弃它而不需要额外的处理。 但是当小部件需要外部资源如CSS, JavaScript, 图片等会比较棘手, 幸运的时候Yii提供 资源包 来解决这个问题。
  • 当一个小部件只包含视图代码,它和视图很相似, 实际上,在这种情况下,唯一的区别是小部件是可以重用类,视图只是应用中使用的普通PHP脚本。
时间: 2024-08-24 16:47:16

Yii框架2.0的小部件的相关文章

Yii框架2.0的 验证码

最近看了一个Yii的教程视频,是按1.1的版本讲的,我想用Yii2.0的框架也参考他的学习开发下,结果发现好多不一样的,现在就说说验证码的事 首先加入一个actions 做验证码图片的显示,实际事调用了 CaptchaActive 类 public function actions() { return [ 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', 'height' => 25, 'width' => 80, 'm

Yii框架2.0的模型

模型是 MVC 模式中的一部分, 是代表业务数据.规则和逻辑的对象. 可通过继承 [[yii\base\Model]] 或它的子类定义模型类,基类[[yii\base\Model]]支持许多实用的特性: 属性: 代表可像普通类属性或数组一样被访问的业务数据; 属性标签: 指定属性显示出来的标签; 块赋值: 支持一步给许多属性赋值; 验证规则: 确保输入数据符合所申明的验证规则; 数据导出: 允许模型数据导出为自定义格式的数组. 属性: 所有 non-static public非静态公有 成员变量

Yii框架2.0的模块

模块是个独立的软件单元,也是又控制器,视图,模型组成的,也可以有自己的布局.但他必须属于某个应用下,不能独立存在. 其中模块的控制器,视图和应用的控制器和视图使用基本相同,不作赘述,下面说说模块的使用.首先可以通过前面说的Gii来生成一个模块,然后配置模块,再web.php 配置文件里加入下面的东西. [ 'modules' => [ 'admin' => [ 'class' => 'app\modules\admin\Module', // ... 模块其他配置 ... ], ], ]

Yii2.0框架 小部件 DetailView

1.数据小部件 Yii 提供了一套数据小部件 widgets,这些小部件可以用于展示数据 DetailView 小部件用于显示一条记录数据. ListView 和 GirdView 小部件能够用于显示一个拥有分页.排序和过滤功能的一个列表或者表格. 2. DetailView 用来显示一条记录的详情,下面这些都是一条记录的情况: 一个Model模型类对象的数据. ActiveRecord类的一个实例对象. 由键值对构成的一个关联数组. 3.DetailView的创建 调用DetailView::

YII2.0之窗体小部件

在工作中用到YII2框架,之前对Yii的Widgets这个不太理解,也就没有用上.最近在查看YII2的英文指南的时候,终于弄明白了是怎么一回事. 举个简单的例子,如果在做后台开发的时候,大部分页面都需要用到一个可选择的列表(<select>),那么我们可以把它做成窗体小部件. 具体看下面代码: <?php /**  * Created by PhpStorm.  * User: Administrator  * Date: 2017/2/14  * Time: 18:01  */ nam

Yii小部件

小部件 Yii提供了一套数据小部件widgets,这些小部件可以用于显示数据. DetailView小部件用于显示一条记录数据. ListView和GridView小部件能够用于显示一个拥有分页.排序和过滤功能的一个列表或者表格. 1.DetailView 用来显示一条记录的详情,下面这些都是一条记录的情况: 一个Model模型类对象的数据 ActiveRecord类的一个实例对象 由键值对构成的关联数组. 2 DetailView的创建 调用DetailView::widget方法 model

Yii2的相关学习记录,alert等美化、confirm异步、session中的flash及小部件的使用(六)

呃,系统自带的alert.confirm等弹出框实在是难看,作为一个颜控,这能忍? 这里我用的是kartik-v/yii2-dialog,这个是基于bootstrap3-dialog这个来做了一些常用alert.confirm和dialog的小部件封装,当然了,本质上还是bootstrap3-dialog,可以用原生的方法,原生方法的用法点这里,而bootstrap3-dialog又是基于bootstrap3的modals做的封装.嗯,基本关系就是这样.在搜索这个相关知识时,经常会看到有人提到b

YII框架源码分析(百度PHP大牛创作-原版-无广告无水印)

                        YII 框架源码分析             百度联盟事业部--黄银锋   目 录 1. 引言 3 1.1.Yii 简介 3 1.2.本文内容与结构 3 2.组件化与模块化 4 2.1.框架加载和运行流程 4 2.2.YiiBase 静态类 5 2.3.组件 6 2.4.模块 9 2.5 .App 应用   10 2.6 .WebApp 应用   11 3.系统组件 13 3.1.日志路由组件  13 3.2.Url 管理组件  15 3.3.异常

YII2 小部件(widgets)

小部件基本上在views中使用,在视图中可调用 yii\base\Widget::widget() 方法使用小部件. 该方法使用 配置 数组初始化小部件并返回小部件渲染后的结果. 例如如下代码插入一个日期选择器小部件,它配置为使用俄罗斯语, 输入框内容为$model的from_date属性值. <?php use yii\jui\DatePicker; ?> <?= DatePicker::widget([ 'model' => $model, 'attribute' =>