Yii2 学习内容整理

一篇为你讲透Yii2的widget

PHPer 2018-01-23 217次浏览 0条评论 0 0 0
yii开发中,用到了大量的widget,我们也能自己建立一个widget,今天为你讲解widget的运行机理,让你游刃有余的操作它。ActiveForm、Breadcrumbs、DetailView、LinkPager、...

yii开发中,用到了大量的widget,我们也能自己建立一个widget,今天为你讲解widget的运行机理,让你游刃有余的操作它。

ActiveForm、Breadcrumbs、DetailView、LinkPager、ListView 等等,这些内置的挂件让我们开发变的如此简单。

本节教你自定义一个widget,顺便说下widget的运行机理和几大重要函数。

老规矩,先说目录。

  • 什么时候用widget
  • 新建一个widget
  • begin & end 方法
  • beforeRun & afterRun 方法

begin...

什么时候用widget

场景还是蛮简单的、当我们发现页面有的区块重复出现了,比如TOP10、比如内容编辑器等、就要考虑是否要做成一个widget了。

新建一个widget

我们还是举例把,新建一个Top10的区块。首先我们要在应用程序的components下新建一个Top10Widget的类,根据psr-4规则,布局应该是这样的

  • components
  • components\Top10Widget.php

Top10Widget.php的内容

namespace app\components;
use yii\base\Widget;
class Top10Widget extends Widget {
	public $catId;
	public function init(){
		parent::init();
		if(empty($this->catId)){
			$this->catId = 0;
		}
	}
	public function run(){		
		parent::run();
	}
}

作为一个widget,你必须要继承于yii\base\Widget才可以,就像我们的Top10Widget一样。类的变量代表将来视图使用该挂件时对其传递的参数,除此之外我们要重载Widget的init和run两个方法。

要注意的一点是,在方法里需要先调用父类的对应方法,如上面代码一样,这个要记住。

init() 方法旨在对传递过来的变量进行验证、筛选及处理,所以对于init而言,如果参数出现异常代表前台并没有传递参数正确,这个时候你可以使用throw new Exception("xxx");来抛出异常,页面会报错,当然为了美观,我们可以使用try ... catch....将这个异常接住然后更友好的显示。

小提示:对于throw异常的方法,在run中也一样,我建议try .... catch ....它们。

好的,上面说了init的初衷,接下来说下run函数(有些挂件并没有使用init,而是将所有数据都放到run里处理也是可以的,不过我一般不这么干)。

run() 方法代表该关键的执行逻辑,针对于init处理过的变量,进行逻辑处理,最后显示给客户想要的东西。就和action一样,这里面可以执行很多很多。

最后我们可以通过return 或 echo 将结果返回给浏览器

namespace app\components;
use yii\base\Widget;
class Top10Widget extends Widget {
	public $catId;
	// 省略的代码....
	public function run(){		
		parent::run();
		return $this->catId; // 不完全等价于 echo $this>-catId
	}
}

那么一个问题出现了,如果我仅仅是想像是一些数字结果,而是希望它的样子更丰富,我要如何做那?
我想你也想到了,我们可以对这个挂件加载一个视图,然后在视图里处理。 ...

登录 | 立即注册

更新于:2018-01-23 23:30:18
    您需要登录后才可以评论。 登录 | 立即注册
    相关内容

    Yii2小部件Widget

    Widgets 小部件kop/yii2-scroll-pager:瀑布滚动翻页 样式不怎么好看,必须点击更多才能加载更多yii2-widget-linkpager:带分页大小的分页栏 用了,还不错的yii2-ajaxf...

    Yii2模型简介

    模型Model是MVC模型中的M,是业务数据、业务规则和业务逻辑的对象。Yii很好的展现了这点,用户可用创建自己定义的模型,比如给一个的表单定义一个模型,这样就把表...

    Yii2模型简介-属性

    Yii2模型简介-场景

    Yii2模型简介-验证规则

    Yii2模型简介-块赋值

    Yii2模型简介-非安全属性

    Yii2模型简介-数据导出

    Yii2模型简介-字段

    Yii2模型简介-最佳实践

    Yii2扩展整理

    这里整理一些自己实测好用的Yii2扩展 20200406

    【坑,勿用】Yii的yii-xunsearch扩展,支持中文的搜索引擎,支持全文索引全文搜索

    简单,易用的yii2导入和导出组件( illusion/yii2-excel)

    Yii2 学习内容整理

    Yii2片段缓存详解yii2常用表单处理方法php yii2 出现mysql-gone-away-2006解决Yii2 数据操作DAO【翻译】 MySQL中yii2使用原生sql CURD...

    Yii2片段缓存详解

    yii2常用表单处理方法

    php yii2 出现mysql-gone-away-2006解决

    Yii2 数据操作DAO

    【翻译】 MySQL中yii2使用原生sql CURD

    一篇为你讲透Yii2的widget

    Yii2模块学习

    Yii2提交表单提示无法验证

    解决Yii2 在线上服务器无法访问GII 和BUG工具栏问题

    Yii2 Model的一些常用验证rules规则

    关于Yii2控制器的layout属性

    yii2如何开启debug工具栏

    使用Yii2发送邮件

    Yii2多表联结子查询的应用

    学习yii2.0——数据缓存、片段缓存、页面缓存、http缓存

    Yii2 获取模块名、控制器名、方法名

    收发邮件(Mailing) | Yii 2.0 权威指南

    Yii2中各种文本框的使用 [ 2.0 版本 ]

    Yii2行为(Behavior)简介

    使用行为(behavior)可以在不修改现有类的情况下,对类的功能进行扩充。 通过将行为绑定到一个类,可以使类具有行为本身所定义的属性和方法,就好像类本来就有这些属...

    揭秘yii2中行为的方法是如何注入到组件类中去的,应该说行为如何和组件关联的

    推荐内容

    MySQL数据库设计总结

    规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎。注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字...

    什么是B-Tree

    二叉查找树、平衡二叉树、红黑树、B-/B+树性能对比

    查问我看笔记功能的实现过程-全文搜索待开启,试试yiisoft/yii2-sphinx

    查问我看笔记功能的实现的重点就是全文搜索,如果不用Yii自带的ActiveRecord的话,就要找扩展,先找了个yii-xunsearch,不行太差了,又找了yiisoft/yii2-elasticsearch,...

    yii2框架中使用sphinx使用搜索引擎 多条件选择搜索

    运行php composer.phar require --prefer-dist yiisoft/yii2-sphinx

    超省心游戏加速:Wireguard+udp加速(CentOS版)--(实测:超不省心),以后搜帖...

    Wireguard+udpspeeder+udp2raw游戏加速方案 ---------------------------------------错误报告及解决-----------...

    wireguard+udpspeeder+udp2raw多用户配置

    Wireguard+udpspeeder+udp2raw游戏加速方案改进版-实测有效

    基于CentOS7 Centos8平台搭建邮件服务器

    EwoMail​在Centos8上安装了,各种坑,各种报错。这个集成包太臃肿了。 20200416 EwoMail 已经弃用,国内的一家公司搞的坑爹产品。 20200418

    如何在RHEL8 / CentOS8上安装Webmin

    设置postfix作为邮件发送服务器

    使用Yii2遇到的问题整理

    Yii的东西很多,学习和使用的时候遇到了各种各样的问题,这里记录整理下,方便大家分享。composer安装kartik-v/yii2-mpdf时报错,这里记录下 Yii2用compos...

    Yii2用composer更新时遇到的错误

    Yii2 用composer update 时提示'git' 不是内部或外部命令,也不是可运行的程序或批处理文件

    Yii2​用composer安装kartik-v/yii2-mpdf时报错,成功解决后,再让其支持中文。

    使用Yii2的setFlash和bootstrap.min.js遇到的问题,bootstrap.min.js的bug?

    Yii2的action不支持大小写吗?其实是支持的

    composer install 使用tips-网上找的composer install的使用技巧方法