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之第六天
Oct 09 PHP
如何在PHP中使用Oracle数据库(1)
Oct 09 PHP
浅析is_writable的php实现
Jun 18 PHP
使用PHP编写的SVN类
Jul 18 PHP
php实现邮件发送并带有附件
Jan 24 PHP
php删除数组元素示例分享
Feb 17 PHP
php实现批量压缩图片文件大小的脚本
Jul 04 PHP
修改destoon会员公司的伪静态中的com目录的方法
Aug 21 PHP
ZendFramework框架实现连接两个或多个数据库的方法
Dec 08 PHP
PHP-FPM的配置与优化讲解
Mar 15 PHP
PHP标准库(PHP SPL)详解
Mar 16 PHP
如何在PHP中生成随机数
Jun 04 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
全国FM电台频率大全 - 6 辽宁省
2020/03/11 无线电
php生成唯一数字id的方法汇总
2015/11/18 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
再谈Jquery Ajax方法传递到action(补充)
2014/05/12 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
2014/05/14 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
2017/09/05 jQuery
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
2018/09/21 Javascript
微信小程序自定义弹出层效果
2020/05/26 Javascript
vue 插槽简介及使用示例
2020/11/19 Vue.js
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
学习python 之编写简单乘法运算题
2016/02/27 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
padas 生成excel 增加sheet表的实例
2018/12/11 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
2020/11/17 Python
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
德国箱包网上商店:koffer24.de
2016/07/27 全球购物
悦木之源美国官网:Origins美国
2016/08/01 全球购物
英国现代家具和照明购物网站:Heal’s
2019/10/30 全球购物
中科创达面试题
2016/12/28 面试题
好家长事迹材料
2014/01/23 职场文书
初一学生期末评语
2014/04/24 职场文书
爱心活动计划书
2014/04/26 职场文书
车辆工程专业求职信
2014/06/14 职场文书
放飞梦想演讲稿200字
2014/08/26 职场文书
诚实守信主题班会
2015/08/13 职场文书
python基础详解之if循环语句
2021/04/24 Python
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers