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远程连接MYSQL数据库非常慢的解决方法
Jul 05 PHP
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
Mar 29 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
Dec 28 PHP
PHP 之Section与Cookie使用总结
Sep 14 PHP
php获取从百度搜索进入网站的关键词的详细代码
Jan 08 PHP
PHP中Fatal error session_start()错误解决步骤
Aug 05 PHP
Laravel 4 初级教程之Pages、表单验证
Oct 30 PHP
php中base_convert()进制数字转换函数实例
Nov 20 PHP
微信支付的开发流程详解
Sep 13 PHP
laravel-admin 中列表筛选方法
Oct 03 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
Oct 14 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
为什么夜间收到的中波电台比白天多
2021/03/01 无线电
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
js创建子窗口并且回传值示例代码
2013/07/02 Javascript
js 高效去除数组重复元素示例代码
2013/12/19 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
详解Javascript 装载和执行
2014/11/17 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
JS组件Bootstrap实现弹出框效果代码
2016/04/26 Javascript
JavaScript获取中英文混合字符串长度的方法示例
2017/02/04 Javascript
JavaScript实现经纬度转换成地址功能
2017/03/28 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
vue-router的钩子函数用法实例分析
2019/10/26 Javascript
js实现选项卡效果
2020/03/07 Javascript
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
python时间整形转标准格式的示例分享
2014/02/14 Python
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
tensorflow识别自己手写数字
2018/03/14 Python
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
德国自行车商店:Tretwerk
2019/06/21 全球购物
Puma印度官网:德国运动品牌
2019/10/06 全球购物
普通大学毕业生自荐信
2013/11/04 职场文书
开工典礼策划方案
2014/05/23 职场文书
汉语言文学专业自荐信
2014/06/11 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
计算机专业自荐信
2015/03/05 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS