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 相关文章推荐
PHP中的cookie
Nov 26 PHP
比较简单的百度网盘文件直链PHP代码
Mar 24 PHP
解析PHP实现下载文件的两种方法
Jul 05 PHP
php合并js请求的例子
Nov 01 PHP
php检测apache mod_rewrite模块是否安装的方法
Mar 14 PHP
PHP正则表达式之捕获组与非捕获组
Nov 06 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
Jun 13 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
php+resumablejs实现的分块上传 断点续传功能示例
Apr 18 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
PHP html_entity_decode()函数讲解
Feb 25 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 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
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
PL-880隐藏功能
2021/03/01 无线电
php存储过程调用实例代码
2013/02/03 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
2019/09/09 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
jQuery EasyUI API 中文文档 - Tree树使用介绍
2011/11/19 Javascript
Jquery Validate 正则表达式实用验证代码大全
2013/08/23 Javascript
Javascript 浮点运算的问题分析与解决方法
2013/08/27 Javascript
CSS+jQuery实现的一个放大缩小动画效果
2013/09/24 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
javascript的数组和常用函数详解
2014/05/09 Javascript
JavaScript中统计Textarea字数并提示还能输入的字符
2014/06/10 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
详解webpack+es6+angular1.x项目构建
2017/05/02 Javascript
详解Webpack DLL用法以及功能
2017/07/11 Javascript
Node.js中Bootstrap-table的两种分页的实现方法
2017/09/18 Javascript
搭建vue开发环境
2018/07/19 Javascript
vue draggable resizable gorkys与v-chart使用与总结
2019/09/05 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
[37:45]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS Orenda
2014/05/22 DOTA
用Python实现通过哈希算法检测图片重复的教程
2015/04/02 Python
Python爬取三国演义的实现方法
2016/09/12 Python
快速了解Python中的装饰器
2018/01/11 Python
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
Python变量赋值的秘密分享
2018/04/03 Python
详解Python if-elif-else知识点
2018/06/11 Python
Python版名片管理系统
2018/11/30 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
外贸英语专业求职信范文
2013/12/25 职场文书
初中教师业务学习材料
2014/05/12 职场文书
老人院义工活动感想
2015/08/07 职场文书