Yii2 学习内容整理

一篇为你讲透Yii2的widget

PHPer 2018-01-23 2210 0 0
yii开发中,用到了大量的widget,我们也能自己建立一个widget,今天为你讲解widget的运行机理,让你游刃有余的操作它。 ActiveForm、Breadcrumbs、DetailView、LinkPager、ListView 等等,这些内置的挂件让我们开发变的如此简单。

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
	}
}

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

namespace app\components;
use yii\base\Widget;
class Top10Widget extends Widget {
	public $catId;
	// 省略的代码....
	public function run(){		
		parent::run();
		return $this->render('top10',[
			'catId'=>$this->catId
		]);
	}
}

top10.php文件在哪建立?按照约定,我们需要在app\components\views下建立这个视图。

use app\components\Top10Widget;
<?= Top10Widget::widget(['catId'=>98]);?>

看到了吧,和控制的视图一样,先use,在使用。 ...

立即注册

更新于:2022-07-15 11:49:44
    您需要登录后才可以评论。 立即注册
    相关内容

    富文本编辑器

    富文本编辑器Redactor在Yii2中的应用

    说说国产电影

    大陆电影《霸王别姬》到底如何?

    周星驰的喜剧之王

    真正的难忘,再说周星驰,《大话西游》两部曲

    不得不提的《英雄本色》,一帮演员和剧组太给力了,当然导演厉害了!

    2010年后的国产电影,看来除了《让子弹飞》其他都可以带过了?

    《芳华》这样露大腿合适吗?

    《国士无双》还是那么好看

    算是知道花木兰那么多成本都花在哪了

    评论《八佰》-为了照顾部分同学的逻辑思维能力,俺们通俗一把

    【豆瓣评论】评《中国合伙人》

    贺岁片 东成西就(1993)(国语) 精彩片段

    推荐内容

    分享几个好用的bt搜索bt资源下载网址网站

    影视电影剧集动漫综艺bt资源在线播放网址网站推荐分享

    全网最新bt磁力搜索引擎bt资源bt网站网址分享

    人气美女女优百度指数排行榜(波多野结衣,苍井空,三上悠亚,深田咏美,桥本有菜,北条...

    最强人造人深田咏美,业界的社交女王

    人生起起落落的三上悠亚,成名前的清纯风,怎么搭配出来的?

    业内第一大长腿,桥本有菜的腿究竟有多长

    波多野结衣,岛国业界著作最多的超级劳模

    日本AV界NO.1,苍井空是多少宅男的疯狂?

    美女女优视频混剪 This Girl-Laza Morgan

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    影视电影剧集动漫综艺bt资源在线播放网址网站推荐分享