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!5的PHP代码高亮显示与实现可运行代码
Mar 15 PHP
PHP中str_replace函数使用小结
Oct 11 PHP
php $_SERVER当前完整url的写法
Nov 12 PHP
项目中应用Redis+Php的场景
May 22 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
Jul 08 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
Jul 25 PHP
thinkphp分页实现效果
Oct 13 PHP
Laravel学习教程之model validation的使用示例
Oct 23 PHP
php实现数组中出现次数超过一半的数字的统计方法
Oct 14 PHP
PHP中检查isset()和!empty()函数的必要性
Feb 13 PHP
PHP hex2bin()函数用法讲解
Feb 25 PHP
PHP编程一定要改掉的5个不良习惯
Sep 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初学入门
2006/11/19 PHP
兼容性最强的PHP生成缩略图的函数代码(修改版)
2011/01/18 PHP
php array_intersect比array_diff快(附详细的使用说明)
2011/07/03 PHP
PHP数据库调用类调用实例(详细注释)
2012/07/12 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
基于Web标准的UI组件 — 树状菜单(2)
2006/09/18 Javascript
dropdownlist之间的互相联动实现(显示与隐藏)
2009/11/24 Javascript
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
js动态创建标签示例代码
2014/06/09 Javascript
js的延迟执行问题分析
2014/06/23 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
JavaScript获取各大浏览器信息图示
2015/11/20 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
在vue项目中安装使用Mint-UI的方法
2017/12/27 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
python实现web方式logview的方法
2015/08/10 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
django实现支付宝支付实例讲解
2019/10/17 Python
Python列表元素常见操作简单示例
2019/10/25 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
10个示例带你掌握python中的元组
2020/11/23 Python
CSS3实现苹果手机解锁的字体闪亮效果示例
2021/01/05 HTML / CSS
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
毕业生求职的求职信
2013/12/05 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
2022/01/18 HTML / CSS