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 相关文章推荐
海河写的 Discuz论坛帖子调用js的php代码
Aug 23 PHP
php快速url重写更新版[需php 5.30以上]
Apr 25 PHP
php设计模式 Factory(工厂模式)
Jun 26 PHP
php学习笔记(三)操作符与控制结构
Aug 06 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
Sep 06 PHP
PHP IDE phpstorm 常用快捷键
May 18 PHP
使用PHP similar text计算两个字符串相似度
Nov 06 PHP
php获取文件后缀的9种方法
Mar 22 PHP
PHP读取XML格式文件的方法总结
Feb 27 PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 PHP
php设计模式之装饰模式应用案例详解
Jun 17 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
php5.3 废弃函数小结
2010/05/16 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
CodeIgniter针对数据库的连接、配置及使用方法
2016/03/03 PHP
程序员的表白神器“520”大声喊出来
2016/05/20 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
PDO::lastInsertId讲解
2019/01/29 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
javascript 节点遍历函数
2010/03/28 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
jQuery插件编写步骤详解
2016/06/03 Javascript
Javascript实现代码折叠功能
2016/08/25 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
js实现前面自动补全位数的方法
2018/10/10 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
详解package.json版本号规则
2019/08/01 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
JS实现点餐自动选择框(案例分析)
2019/12/10 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
一行JavaScript代码如何实现瀑布流布局
2020/12/11 Javascript
Python中线程编程之threading模块的使用详解
2015/06/23 Python
python3安装pip3(install pip3 for python 3.x)
2018/04/03 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
物流管理专业应届生求职信
2013/11/21 职场文书
煤矿机修工岗位职责
2014/02/07 职场文书
李培根演讲稿
2014/05/22 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
先进党支部事迹材料
2014/12/24 职场文书
先进班组材料范文
2014/12/25 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
MySQL修改默认引擎和字符集详情
2021/09/25 MySQL
Python编程super应用场景及示例解析
2021/10/05 Python