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 相关文章推荐
破解.net程序(dll文件)编译和反编译方法
Jan 31 PHP
PHPMailer邮件发送的实现代码
May 04 PHP
一些php项目中比较通用的php自建函数的详解
Jun 06 PHP
对PHP语言认识上需要避免的10大误区
Jun 12 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
php获取图片信息的方法详解
Dec 10 PHP
CI操作cookie的方法分析(基于helper类库)
Mar 28 PHP
PHP中的Trait 特性及作用
Apr 03 PHP
wordpress网站转移到本地运行测试的方法
Mar 15 PHP
Laravel框架使用Redis的方法详解
May 30 PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 PHP
PHP哈希表实现算法原理解析
Dec 11 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
动易数据转成dedecms的php程序
2007/04/07 PHP
优化PHP程序的方法小结
2012/02/23 PHP
php实现mysql数据库操作类分享
2014/02/14 PHP
php中多维数组按指定value排序的实现代码
2014/08/19 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
php7 错误处理机制修改实例分析
2020/05/25 PHP
javascript 对表格的行和列都能加亮显示
2008/12/26 Javascript
一个简单的js鼠标划过切换效果
2010/06/30 Javascript
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
2014/01/26 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
详细分析JavaScript函数定义
2015/07/16 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
对Js OOP编程 创建对象的一些全面理解
2016/07/26 Javascript
详解ES6中的let命令
2020/04/05 Javascript
浅谈原生JS实现jQuery的animate()动画示例
2017/03/08 Javascript
JS 设置Cookie 有效期 检测cookie
2017/06/15 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
2017/06/30 Javascript
jquery实现简单自动轮播图效果
2020/07/29 jQuery
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
python中enumerate函数用法实例分析
2015/05/20 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
python实现爬山算法的思路详解
2019/04/09 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
如何理解python面向对象编程
2020/06/01 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
John Hardy官方网站:手工设计首饰的奢侈品牌
2017/07/05 全球购物
实验教师岗位职责
2014/02/13 职场文书
文明城市标语
2014/06/16 职场文书
社区关爱留守儿童活动方案
2014/08/22 职场文书
监察建议书
2015/02/04 职场文书
个人求职信格式范文
2015/03/20 职场文书
心理健康教育培训研修感言
2015/11/18 职场文书
Python使用protobuf序列化和反序列化的实现
2021/05/19 Python