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 相关文章推荐
3
Oct 09 PHP
PHP下一个非常全面获取图象信息的函数
Nov 20 PHP
批量修改RAR文件注释的php代码
Nov 20 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
Apr 15 PHP
php获取本地图片文件并生成xml文件输出具体思路
Apr 27 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
Nov 18 PHP
PHP把MSSQL数据导入到MYSQL的方法
Dec 27 PHP
WordPress过滤垃圾评论的几种主要方法小结
Jul 11 PHP
解决微信授权回调页面域名只能设置一个的问题
Dec 11 PHP
利用ajax和PHP实现简单的流程管理
Mar 23 PHP
php输出文字乱码的解决方法
Oct 04 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
Jun 24 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
盘点被央视点名过的日本动画电影 一部比一部强
2020/03/08 日漫
用Php实现链结人气统计
2006/10/09 PHP
Session服务器配置指南与使用经验的深入解析
2013/06/17 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
2015/12/09 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
React.js入门学习第一篇
2016/03/30 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
Vue.js -- 过滤器使用总结
2017/02/18 Javascript
js 输入框 正则表达式(菜鸟必看教程)
2017/02/19 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
JS实现520 表白简单代码
2018/05/21 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
Python批量修改文件后缀的方法
2014/01/26 Python
python list使用示例 list中找连续的数字
2014/01/27 Python
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
python 禁止函数修改列表的实现方法
2017/08/03 Python
python实现图片筛选程序
2018/10/24 Python
对Python中画图时候的线类型详解
2019/07/07 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
python语言的优势是什么
2020/06/17 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
2020/12/04 Python
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
英国玛莎百货澳大利亚:Marks & Spencer Australia
2019/08/30 全球购物
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
档案保密承诺书
2014/06/03 职场文书
python基础之函数的定义和调用
2021/10/24 Python
小程序自定义轮播图圆点组件
2022/06/25 Javascript