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 相关文章推荐
我的论坛源代码(三)
Oct 09 PHP
PHP+JS无限级可伸缩菜单详解(简单易懂)
Jan 02 PHP
PHP CURL模拟GET及POST函数代码
Apr 25 PHP
centos 5.6 升级php到5.3的方法
May 14 PHP
解析数组非数字键名引号的必要性
Aug 09 PHP
js和php邮箱地址验证的实现方法
Jan 09 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
Mar 18 PHP
laravel 中如何使用ajax和vue总结
Aug 16 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
Sep 16 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
php微信公众号开发之二级菜单
Oct 20 PHP
PHP中的异常处理机制深入讲解
Nov 10 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支持页面回退的两种方法[转]
2007/02/14 PHP
php Xdebug 调试扩展的安装与使用.
2010/03/13 PHP
使用Discuz关键词服务器实现PHP中文分词
2014/03/11 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
php中smarty模板条件判断用法实例
2015/06/11 PHP
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
jQuery()方法的第二个参数详解
2015/04/29 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
js遍历map javaScript遍历map的简单实现
2016/08/26 Javascript
详解webpack es6 to es5支持配置
2017/05/04 Javascript
Easyui在treegrid添加控件的实现方法
2017/06/23 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
2020/11/11 Javascript
javascript实现倒计时提示框
2021/03/02 Javascript
[01:20:06]TNC vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
浅谈function(函数)中的动态参数
2017/04/30 Python
python实现二叉树的遍历
2017/12/11 Python
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
Python基础学习之函数方法实例详解
2019/06/18 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
python画微信表情符的实例代码
2019/10/09 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
2020/12/16 Python
利用CSS3的border-radius绘制太极及爱心图案示例
2016/05/17 HTML / CSS
调解员先进事迹材料
2014/02/07 职场文书
安踏广告词改编版
2014/03/21 职场文书
社区居务公开实施方案
2014/03/27 职场文书
《莫泊桑拜师》教学反思
2014/04/23 职场文书
初中班主任评语
2014/04/24 职场文书
三好学生评语大全
2014/12/29 职场文书
荒岛余生观后感
2015/06/09 职场文书
让人感觉高大上的讲话稿怎么写?
2019/07/08 职场文书
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js