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 相关文章推荐
phpMyAdmin 安装及问题总结
May 28 PHP
浅谈php函数serialize()与unserialize()的使用方法
Aug 19 PHP
destoon调用discuz论坛中带图片帖子的实现方法
Aug 21 PHP
PHP版微信公众平台红包API
Apr 02 PHP
PHP用户验证和标签推荐的简单使用
Oct 31 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
Dec 07 PHP
PhpStorm配置Xdebug调试的方法步骤
Feb 02 PHP
PHP单例模式实例分析【防继承,防克隆操作】
May 22 PHP
php面试实现反射注入的详细方法
Sep 30 PHP
Laravel定时任务的每秒执行代码
Oct 22 PHP
Laravel框架实现即点即改功能的方法分析
Oct 31 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 采集获取指定网址的内容
2010/01/05 PHP
php下将多个数组合并成一个数组的方法与实例代码
2011/02/03 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
php获取指定数量随机字符串的方法
2017/02/06 PHP
使用PHP开发留言板功能
2019/11/19 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
IE与FireFox中的childNodes区别
2011/10/20 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
2014/03/26 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
2016/05/28 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
Node.js文件编码格式的转换的方法
2018/04/27 Javascript
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
微信小程序页面调用自定义组件内的事件详解
2019/09/12 Javascript
JS实现简单的表格增删
2020/01/16 Javascript
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
详解Python中的序列化与反序列化的使用
2015/06/30 Python
python 定时器,实现每天凌晨3点执行的方法
2019/02/20 Python
opencv导入头文件时报错#include的解决方法
2019/07/31 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
tensorflow之变量初始化(tf.Variable)使用详解
2020/02/06 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
详解Html5微信支付爬坑之路
2018/07/24 HTML / CSS
美国校园市场:OCM
2017/06/08 全球购物
初中班主任寄语
2014/04/04 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
党支部承诺书
2015/01/20 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android