ThinkPHP3.1的Widget新用法


Posted in PHP onJune 19, 2014

ThinkPHP3.0版本的Widget对Action和View的支持力度是相对不够的,仅能够实现基本的模板渲染输出。而3.1版本的发布带来的多层MVC功能,给我们实现Widget的方式带来了新的思路,且看是如何实现吧。

由于ThinkPHP3.1增加了对多层MVC的支持,因此3.1版本可以支持多层的控制器功能,由此我们就可以在控制器层再增加一层:Widget层。

首先,还是在项目的Lib目录下面创建一个Widget目录,并且创建一个TestWidget类(Lib/Widget/TestWidget.class.php)如下:

class TestWidget extends Action{
  public function hello($name=''){
    echo ("hello,".$name."!");
  }
 }

我们看到TestWidget和之前的区别是没有继承Widget类,而是直接继承了Action类,这就代表着在TestWidget中可以直接调用Action的方法,包括对模板的渲染输出。

定义完成后,我们怎么调用这个Widget呢?用W方法肯定行不通了,这次需要R方法出场了。
R方法的作用是远程调用模块的操作,但是3.1赋予了它新的作用,可以支持调用所有控制器层的操作方法,所以,我们可以在模板中这样来调用Widget:

{:R('Test/hello',array('ThinkPHP'),'Widget')}

就可以实现在页面中的某个区域输出:

hello,ThinkPHP!

由于除了Action控制器之外的其他控制器层是无法直接通过URL访问的,所以这个Widget方法只能通过R方法在内部调用才可以。

你可以在TestWidget类中调用Model来输出其他数据,如果需要渲染自身的模板,则可以直接调用display方法就行了。

class TestWidget extends Action{
  public function hello($name=''){
    $this->assign('name',$name);
    $this->display('Test:hello');
  }
 }

我们在项目的Tpl/Test/ 目录下面创建一个hello(Tpl/Test/hello.html)模板文件,添加输出:

Hello,{$name}!

如果你希望和之前的Widget一样,把模板文件放到当前目录下面,则可以使用:

class TestWidget extends Action{
  public function hello($name=''){
    $this->assign('name',$name);
    $this->display(dirname(__FILE__).'/Test/hello.html');
  }
 }

这个时候,你就可以把刚才定义的hello模板文件放入Widget/Test/ 目录下面了。

PHP 相关文章推荐
PHP 和 MySQL 基础教程(二)
Oct 09 PHP
php中获得视频时间总长度的另一种方法
Sep 15 PHP
PHP 日,周,月点击排行统计
Jan 11 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
Jan 13 PHP
PHP 验证登陆类分享
Mar 13 PHP
分享十款最出色的PHP安全开发库中文详细介绍
Mar 22 PHP
phpMyAdmin安装并配置允许空密码登录
Jul 04 PHP
全新Mac配置PHP开发环境教程
Feb 03 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
Apr 02 PHP
php实现单笔转账到支付宝功能
Oct 09 PHP
Laravel 5.5 异常处理 & 错误日志的解决
Oct 17 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
May 26 PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 #PHP
ThinkPHP3.1新特性之Action参数绑定
Jun 19 #PHP
ThinkPHP3.1新特性之多层MVC的支持
Jun 19 #PHP
php定界符
Jun 19 #PHP
php获取网页中图片、DIV内容的简单方法
Jun 19 #PHP
PHP两种去掉数组重复值的方法比较
Jun 19 #PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
Jun 19 #PHP
You might like
PHP最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
PHP 常用数组内部函数(Array Functions)介绍
2013/06/05 PHP
PHP处理postfix邮件内容的方法
2015/06/16 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
Avengerls vs KG BO3 第三场2.18
2021/03/10 DOTA
javascript 流畅动画实现原理
2009/09/08 Javascript
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
使用正则表达式的格式化与高亮显示json字符串
2014/12/03 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
在一般处理程序(ashx)中弹出js提示语
2017/08/16 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
初步探究Python程序的执行原理
2015/04/11 Python
利用Python为iOS10生成图标和截屏
2016/09/24 Python
Python实现的直接插入排序算法示例
2018/04/29 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
css3实例教程 一款纯css3实现的发光屏幕旋转特效
2014/12/07 HTML / CSS
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
金融行业务员的自我评价
2013/12/13 职场文书
情侣吵架检讨书
2014/02/05 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
合作意向书
2014/07/30 职场文书
交通事故协议书范本
2014/11/18 职场文书
课堂打架检讨书200字
2014/11/21 职场文书
创先争优个人总结
2015/03/04 职场文书
Python实现生活常识解答机器人
2021/06/28 Python