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实现框架(一)
Oct 09 PHP
用PHP实现递归循环每一个目录
Aug 08 PHP
PHP删除数组中的特定元素的代码
Jun 28 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
Jun 21 PHP
ThinkPHP实现一键清除缓存方法
Jun 26 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
Jun 17 PHP
PHPCMS忘记后台密码的解决办法
Oct 30 PHP
php连接微软MSSQL(sql server)完全攻略
Nov 27 PHP
ThinkPHP下表单令牌错误与解决方法分析
May 20 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 PHP
PHP defined()函数的使用图文详解
Jul 20 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 array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
PHP查询大量数据内存耗尽问题的解决方法
2016/10/28 PHP
php获得文件夹下所有文件的递归算法的简单实例
2016/11/01 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
详解Vue CLI3配置之filenameHashing使用和源码设计使用和源码设计
2018/08/31 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
Vue.js中该如何自己维护路由跳转记录
2019/05/19 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
vue各种事件监听实例(小结)
2020/06/24 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
Python中使用PyHook监听鼠标和键盘事件实例
2014/07/18 Python
python中zip()方法应用实例分析
2016/04/16 Python
python 多线程重启方法
2019/02/18 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
pytorch 输出中间层特征的实例
2019/08/17 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
python已协程方式处理任务实现过程
2019/12/27 Python
jupyter实现重新加载模块
2020/04/16 Python
一款纯css3实现的颜色渐变按钮的代码教程
2014/11/12 HTML / CSS
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
汽车检测与维修专业求职信
2013/10/30 职场文书
大学校庆邀请函
2014/01/11 职场文书
七一党日活动总结
2014/07/08 职场文书
党员十八大心得体会
2014/09/12 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
自主招生自荐信格式
2015/03/04 职场文书
2016基督教会圣诞节开幕词
2016/03/04 职场文书
创业计划书之甜品店
2019/09/18 职场文书
python 学习GCN图卷积神经网络
2022/05/11 Python