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 相关文章推荐
一个域名查询的程序
Oct 09 PHP
php 中文处理函数集合
Aug 27 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
Jun 21 PHP
教你如何使用php session
Oct 28 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
Apr 19 PHP
PHP内存缓存Memcached类实例
Dec 08 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
Feb 15 PHP
php根据某字段对多维数组进行排序的方法
Mar 07 PHP
PHP带节点操作的无限分类实现方法详解
Nov 09 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
YII框架模块化处理操作示例
Apr 26 PHP
PHP创建XML接口示例
Jul 04 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
php上传图片并压缩的实现方法
2015/12/22 PHP
基于JQuery的访问WebService的代码(可访问Java[Xfire])
2010/11/19 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
2013/05/15 Javascript
Javascript 浮点运算的问题分析与解决方法
2013/08/27 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
JavaScript四种调用模式和this示例介绍
2014/01/02 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
2019/08/13 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
Python实现高效求解素数代码实例
2015/06/30 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
python实现桌面托盘气泡提示
2019/07/29 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
python实现学生成绩测评系统
2020/06/22 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
h5封装下拉刷新
2020/08/25 HTML / CSS
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
台湾7-ELEVEN线上购物中心:7-11
2021/01/21 全球购物
个人简历中自我评价
2014/02/11 职场文书
高中军训感言600字
2014/03/11 职场文书
五四青年节活动总结
2015/02/10 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书