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 相关文章推荐
PhpMyAdmin中无法导入sql文件的解决办法
Jan 08 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
Sep 25 PHP
PHP安全防范技巧分享
Nov 03 PHP
php中调用其他系统http接口的方法说明
Feb 28 PHP
php多维数组去掉重复值示例分享
Mar 02 PHP
PHP实现利用MySQL保存session的方法
Aug 23 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
Sep 06 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
Feb 14 PHP
php array_merge函数使用需要注意的一个问题
Mar 30 PHP
php metaphone()函数的定义和用法
May 15 PHP
PHP对象实例化单例方法
Jan 19 PHP
swoole和websocket简单聊天室开发
Nov 18 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 var_export与var_dump 输出的不同
2013/08/09 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
PHP实现带进度条的Ajax文件上传功能示例
2019/07/02 PHP
XML的代替者----JSON
2007/07/21 Javascript
JS面向对象编程 for Cookie
2010/09/19 Javascript
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
详解javascript高级定时器
2015/12/31 Javascript
Actionscript与javascript交互实例程序(修改)
2016/09/22 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
php register_shutdown_function函数详解
2017/07/23 Javascript
react-native ListView下拉刷新上拉加载实现代码
2017/08/03 Javascript
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
Vue中封装input组件的实例详解
2017/10/17 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
Vuex中的State使用介绍
2019/01/19 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
2019/09/13 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
Python 字典(Dictionary)操作详解
2014/03/11 Python
python检测某个变量是否有定义的方法
2015/05/20 Python
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
解决django服务器重启端口被占用的问题
2019/07/26 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
2020/03/13 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
路政管理毕业自荐书范文
2014/02/10 职场文书
广告词串烧
2014/03/19 职场文书
房产转让协议书
2014/04/11 职场文书
初三学生评语大全
2014/04/24 职场文书
红十字会救护培训简讯
2015/07/20 职场文书
关于nginx 实现jira反向代理的问题
2021/09/25 Servers
python画条形图的具体代码
2022/04/20 Python