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 相关文章推荐
Oracle Faq(Oracle的版本)
Oct 09 PHP
php中用socket模拟http中post或者get提交数据的示例代码
Aug 08 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
Jun 26 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
Jul 25 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
Aug 11 PHP
php返回json数据函数实例
Oct 09 PHP
PHP生成随机密码方法汇总
Aug 27 PHP
PHP发送AT指令实例代码
May 26 PHP
最新最全PHP生成制作验证码代码详解(推荐)
Jun 12 PHP
Yii2单元测试用法示例
Nov 12 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
Laravel框架实现的记录SQL日志功能示例
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
ThinkPHP3.1基础知识快速入门
Jun 19 #PHP
php计算两个日期时间差(返回年、月、日)
Jun 19 #PHP
You might like
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
JavaScript的eval JSON object问题
2009/11/15 Javascript
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
2011/08/23 Javascript
用jQuery中的ajax分页实现代码
2011/09/20 Javascript
jQuery中after的两种用法实例
2013/07/03 Javascript
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
Jquery实现纵向横向菜单
2016/01/24 Javascript
JQuery Mobile实现导航栏和页脚
2016/03/09 Javascript
jQuery编写textarea输入字数限制代码
2017/03/23 jQuery
详解JS中的attribute属性
2017/04/25 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
2019/05/10 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
详解Webpack4多页应用打包方案
2020/07/16 Javascript
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
Python实现文件复制删除
2016/04/19 Python
Python中防止sql注入的方法详解
2017/02/25 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
利用Python实现斐波那契数列的方法实例
2020/07/26 Python
骆驼官方商城:CAMEL
2016/11/22 全球购物
八年级音乐教学反思
2014/01/09 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
2014年工会工作总结
2014/11/12 职场文书
JavaScript实现淘宝商品图切换效果
2021/04/29 Javascript
Python趣味挑战之给幼儿园弟弟生成1000道算术题
2021/05/28 Python
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP