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限制页面只能在微信自带浏览器访问的代码
Jan 15 PHP
php调用nginx的mod_zip模块打包ZIP文件
Jun 11 PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 PHP
学习PHP的数组总结【经验】
May 05 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
Jul 02 PHP
php实现带读写分离功能的MySQL类完整实例
Jul 28 PHP
php+jQuery递归调用POST循环请求示例
Oct 14 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
Aug 11 PHP
php实现解析xml并生成sql语句的方法
Feb 03 PHP
如何判断微信付款码和支付宝付款码
Apr 01 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
锁定年轻人的双倍活力 星巴克推出星倍醇即饮浓咖啡
2021/03/03 咖啡文化
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
Yii快速入门经典教程
2015/12/28 PHP
php使用pear_smtp发送邮件
2016/04/15 PHP
Yii2实现增删改查后留在当前页的方法详解
2017/01/13 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
node.js实现多图片上传实例
2014/06/03 Javascript
javascript中Object使用详解
2015/01/26 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
vue项目中使用ueditor的实例讲解
2018/03/05 Javascript
Vue实现自定义下拉菜单功能
2018/07/16 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
Vue监听事件实现计数点击依次增加的方法
2018/09/26 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
Python基于有道实现英汉字典功能
2015/07/25 Python
Python中eval带来的潜在风险代码分析
2017/12/11 Python
python读取与写入csv格式文件的示例代码
2017/12/16 Python
python机器学习之神经网络(一)
2017/12/20 Python
pandas将numpy数组写入到csv的实例
2018/07/04 Python
实例讲解python中的序列化知识点
2018/10/08 Python
Python从单元素字典中获取key和value的实例
2018/12/31 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
伦敦高达60%折扣的钻石珠宝商:Purely Diamonds
2018/06/24 全球购物
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
《蓝色的树叶》教学反思
2014/02/24 职场文书
反邪教标语
2014/06/23 职场文书
音乐兴趣小组活动总结
2014/07/07 职场文书
高中学生会竞选演讲稿
2014/08/25 职场文书
大学生创业事迹材料
2014/12/30 职场文书
涨价通知怎么写
2015/04/23 职场文书
机关保密工作承诺书
2015/05/04 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
Java反应式框架Reactor中的Mono和Flux
2021/07/25 Java/Android