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获取url字符串截取路径的文件名和扩展名的函数
Jan 22 PHP
php下清空字符串中的HTML标签的代码
Sep 06 PHP
php获取从百度搜索进入网站的关键词的详细代码
Jan 08 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
Oct 30 PHP
PHP缓存集成库phpFastCache用法
Dec 15 PHP
php格式化金额函数分享
Feb 02 PHP
php简单实现发送带附件的邮件
Jun 10 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
Feb 16 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
Mar 10 PHP
php打包压缩文件之ZipArchive方法用法分析
Apr 30 PHP
PHP 无限级分类
May 04 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
Aug 21 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
声音就能俘获人心,蕾姆,是哪个漂亮小姐姐配音呢?
2020/03/03 日漫
我的论坛源代码(七)
2006/10/09 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
Bootstrap源码解读排版(1)
2016/12/23 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
2017/01/01 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
vue-cli3.0 环境变量与模式配置方法
2018/11/08 Javascript
详解babel升级到7.X采坑总结
2019/05/12 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
python设置检查点简单实现代码
2014/07/01 Python
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
python读取文件名并改名字的实例
2019/01/07 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
python游戏开发的五个案例分享
2020/03/09 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
HTML5中使用postMessage实现Ajax跨域请求的方法
2016/04/19 HTML / CSS
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
管道维修工岗位职责
2013/12/27 职场文书
在校学生职业规划范文
2014/01/08 职场文书
医药销售求职信范文
2014/02/01 职场文书
高中微机老师自我鉴定
2014/02/16 职场文书
限期整改通知书
2015/04/22 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
环境卫生标语
2015/08/03 职场文书
企业管理不到位检讨书
2019/06/27 职场文书
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python
Tomcat starup.bat 脚本实现开机自启动
2022/04/20 Servers
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang