ThinkPHP3.1新特性之Action参数绑定

 更新时间:2014年06月19日 11:22:08   投稿:shichen2014  
ThinkPHP3.1版的Action参数绑定功能提供了URL变量和操作方法的参数绑定支持,这一功能可以使得你的操作方法定义和参数获取更加清晰,也便于跨模块调用操作方法,需要的朋友可以参考下

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封装的mongodb操作类代码

    php封装的mongodb操作类代码

    这篇文章主要分享一个php封装的mongodb操作类,有需要的朋友们可以参考一下
    2017-08-08
  • laravel返回统一格式错误码问题

    laravel返回统一格式错误码问题

    在使用yii和laravel的过程中,两个框架对web-api都非常友好,也都对restful做了不同程度的支持,但是还是遇到了一些问题,下面以laravel6.4为例,简单描述下我遇到的问题,需要的朋友参考下吧
    2019-11-11
  • php的api数据接口书写实例(推荐)

    php的api数据接口书写实例(推荐)

    下面小编就为大家带来一篇php的api数据接口书写实例(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • 再谈PHP中单双引号的区别详解

    再谈PHP中单双引号的区别详解

    单引号和双引号到底有啥区别呢?很多朋友都不太清楚,下面通过本文给大家介绍PHP中单双引号的区别详解,感兴趣的朋友一起学习吧
    2016-06-06
  • Laravel 自定命令以及生成文件的例子

    Laravel 自定命令以及生成文件的例子

    今天小编就为大家分享一篇Laravel 自定命令以及生成文件的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • PHP如何防止用户重复提交表单

    PHP如何防止用户重复提交表单

    这篇文章主要介绍了PHP如何防止用户重复提交表单,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析

    TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析

    这篇文章主要介绍了TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法,结合实例形式分析了thinkPHP3.2.3框架使用CKeditor编辑器相关配置方法与操作注意事项,需要的朋友可以参考下
    2019-12-12
  • Laravel框架实现利用监听器进行sql语句记录功能

    Laravel框架实现利用监听器进行sql语句记录功能

    这篇文章主要介绍了Laravel框架实现利用监听器进行sql语句记录功能,结合实例形式分析了Laravel框架监听器的创建、引入以及使用监听器记录sql语句的相关操作技巧,需要的朋友可以参考下
    2018-06-06
  • THinkPHP获取客户端IP与IP地址查询的方法

    THinkPHP获取客户端IP与IP地址查询的方法

    这篇文章主要介绍了THinkPHP获取客户端IP与IP地址查询的方法,结合实例形式分析了thinkPHP针对客户端IP地址操作的相关函数与使用技巧,需要的朋友可以参考下
    2016-11-11
  • php实现支付宝当面付(扫码支付)功能

    php实现支付宝当面付(扫码支付)功能

    这篇文章主要为大家详细介绍了php实现支付宝当面付,扫码支付功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05

最新评论