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 相关文章推荐
15个小时----从修改程序到自己些程序
Oct 09 PHP
php 获取页面中指定内容的实现类
Jan 23 PHP
PHP中spl_autoload_register()和__autoload()区别分析
May 10 PHP
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
Sep 24 PHP
PHP对文件进行加锁、解锁实例
Jan 23 PHP
PHP处理大量表单字段的便捷方法
Feb 07 PHP
php中的登陆login实例代码
Jun 20 PHP
使用PHP免费发送定时短信的实例
Oct 24 PHP
简单谈谈PHP中的trait
Feb 25 PHP
详解php实现页面静态化原理
Jun 21 PHP
php微信公众号开发之翻页查询
Oct 20 PHP
PHP 观察者模式深入理解与应用分析
Sep 25 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
一个简单实现多条件查询的例子
2006/10/09 PHP
PHP 数字左侧自动补0
2008/03/31 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
CI框架Session.php源码分析
2014/11/03 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
商城常用滚动的焦点图效果代码简单实用
2013/03/28 Javascript
使用JS 清空File控件的路径值
2013/07/08 Javascript
js 实现 input type="file" 文件上传示例代码
2013/08/07 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
JS获取input file绝对路径的方法(推荐)
2016/08/02 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
2016/11/03 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
浅析vue给不同环境配置不同打包命令
2018/08/17 Javascript
js实现淘宝首页的banner栏效果
2019/11/26 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
anaconda中更改python版本的方法步骤
2019/07/14 Python
python正则-re的用法详解
2019/07/28 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
伦敦的高级牛仔布专家:Trilogy
2018/08/06 全球购物
简历中个人求职的自我评价模板
2013/11/29 职场文书
会计电算化专业毕业生推荐信
2013/12/24 职场文书
商铺门前三包责任书
2014/07/25 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
党员评议自我评价
2015/03/03 职场文书
第一节英语课开场白
2015/06/01 职场文书
2016年优秀共青团员事迹材料
2016/02/25 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
Pytorch中的数据集划分&正则化方法
2021/05/27 Python
python_tkinter事件类型详情
2022/03/20 Python
Golang Web 框架Iris安装部署
2022/08/14 Python