ThinkPHP3.1新特性之Action参数绑定


Posted in PHP onJune 19, 2014

ThinkPHP3.1版的Action参数绑定功能提供了URL变量和操作方法的参数绑定支持,这一功能可以使得你的操作方法定义和参数获取更加清晰,也便于跨模块调用操作方法。这一新特性对以往的操作方法使用没有任何影响,你也可以用新的方式来改造以往的操作方法定义。

Action参数绑定的原理是把URL中的参数(不包括分组、模块和操作地址)和控制器的操作方法中的参数进行绑定。例如,我们给Blog模块定义了两个操作方法read和archive方法,由于read操作需要指定一个id参数,archive方法需要指定年份(year)和月份(month)两个参数。

class BlogAction extends Action{
  public function read($id){
    echo 'id='.$id;
    $Blog = M('Blog');
    $Blog->find($id);
  }
  public function archive($year='2012',$month='01'){
    echo 'year='.$year.'&month='.$month;
    $Blog = M('Blog');
    $year  =  $year;
    $month =  $month;
    $begin_time = strtotime($year . $month . "01");
    $end_time = strtotime("+1 month", $begin_time);
    $map['create_time'] = array(array('gt',$begin_time),array('lt',$end_time));
    $map['status'] =  1;
    $list = $Blog->where($map)->select();
  }
 }

URL的访问地址分别是:

http://serverName/index.php/Blog/read/id/5
http://serverName/index.php/Blog/archive/year/2012/month/03

两个URL地址中的id参数和year和month参数会自动和read操作方法以及archive操作方法的同名参数绑定。
输出的结果依次是:

id=5
year=2012&month=03

Action参数绑定的参数必须和URL中传入的参数名称一致,但是参数顺序不需要一致。也就是说

http://serverName/index.php/Blog/archive/month/03/year/2012

和上面的访问结果是一致的,URL中的参数顺序和操作方法中的参数顺序都可以随意调整,关键是确保参数名称一致即可。
如果用户访问的URL地址是(至于为什么会这么访问暂且不提):

http://serverName/index.php/Blog/read/

那么会抛出下面的异常提示:

参数错误:id

报错的原因很简单,因为在执行read操作方法的时候,id参数是必须传入参数的,但是方法无法从URL地址中获取正确的id参数信息。由于我们不能相信用户的任何输入,因此建议你给read方法的id参数添加默认值,例如:

  

public function read($id=0){
    echo 'id='.$id;
    $Blog = M('Blog');
    $Blog->find($id);
  }

这样,当我们访问

http://serverName/index.php/Blog/read/

的时候 就会输出

id=0

当我们访问

http://serverName/index.php/Blog/archive/

的时候,输出:

year=2012&month=01
PHP 相关文章推荐
隐藏你的.php文件的实现方法
Mar 19 PHP
用PHP伪造referer突破网盘禁止外连的代码
Jun 15 PHP
php 遍历数据表数据并列表横向排列的代码
Sep 05 PHP
PHP下操作Linux消息队列完成进程间通信的方法
Jul 24 PHP
PHP执行zip与rar解压缩方法实现代码
Dec 05 PHP
Smarty foreach控制循环次数的实现详解
Jul 03 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
Jul 15 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
Mar 25 PHP
PHP常见的6个错误提示及解决方法
Jul 07 PHP
Ubuntu上安装yaf扩展的方法
Jan 29 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
Yii实现微信公众号场景二维码的方法实例
Aug 30 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
ThinkPHP3.1基础知识快速入门
Jun 19 #PHP
php计算两个日期时间差(返回年、月、日)
Jun 19 #PHP
You might like
thinkphp 一个页面使用2次分页的实现方法
2013/07/15 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
2018/06/01 PHP
JS 页面内容搜索,类似于 Ctrl+F功能的实现代码
2007/08/13 Javascript
JS判定是否原生方法
2013/07/22 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
深入分析jsonp协议原理
2015/09/26 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
2016/11/04 Javascript
mui上拉加载更多下拉刷新数据的封装过程
2017/11/03 Javascript
vue  directive定义全局和局部指令及指令简写
2018/11/20 Javascript
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
[01:25:38]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第一场 1月19日
2021/03/11 DOTA
Python中Class类用法实例分析
2015/11/12 Python
python入门前的第一课 python怎样入门
2018/03/06 Python
python3 requests中使用ip代理池随机生成ip的实例
2018/05/07 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
python梯度下降法的简单示例
2018/08/31 Python
python中map的基本用法示例
2018/09/10 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
详解Python Celery和RabbitMQ实战教程
2021/01/20 Python
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
Vrbo英国:预订度假屋
2020/08/19 全球购物
大气污染防治方案
2014/05/19 职场文书
英语课前三分钟演讲稿
2014/08/19 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
庆七一宣传标语
2014/10/08 职场文书
2015年仓管员工作总结
2015/04/21 职场文书
中学政教处工作总结
2015/08/13 职场文书
导游词之昭君岛
2020/01/17 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python